JAVA gibt falschen Wert aus?

...komplette Frage anzeigen

4 Antworten

Es gibt einen Abkürzungsalgorithmus, der die extrem großen Zwischenergebnisse (und das Abschneiden oder Überläufe) umgeht. JAVA hat diesen bereits fest eingebaut:

BigInteger.modPow(exponent, mod);

siehe https://www.tutorialspoint.com/java/math/biginteger_modpow.htm

Dann gibt es noch eine Stufe extremer:

PowPowMod(x,y,z,h) siehe

http://www.lamprechts.de/gerd/php/RechnerMitUmkehrfunktion.php



PowPowMod(75,23,1,187) ergibt 80


Modulo sollte man grundsätzlich nur mit Ganzzahlen rechnen. (Es sei denn, der Modul ist eine nichtganze Zahl.)

BigInteger sollte zwar helfen, geschickter ist es aber, hier nicht nur eine eigene IntegerPower-Funktion zu verwenden (ggf. definieren), sondern auch eine Potenzfunktion mit eingebautem Modulus zu verwenden (ggf. definieren).

Du hast bei der Zuweisung von double a eine schließende Klammer zu viel, wenn mich nicht alles täuscht.

Probier mal folgendes:

https://bitbucket.org/snippets/Ettar/ngE9d5

Für ganzzahlige Werte sollte das funzen.

Ja, die ist wahrscheinlich beim reinkopieren verloren gegangen.
Danke klappt perfekt!

0
@abcdefxxxfedcba

Kein Ding. Wie gesagt: Ganzzahlen sollten kein Problem sein, Kommazahlen wären vmtl. ein Problem ;)

0

Double hat eine hohe Genauigkeit, allerdings wird er ab einer gewissen Größe ungenau. Versuch mal dich mit BIGDECIMAL zu beschäftigen, möglicherweise hast du da genauere Ergebnisse.

Ok, danke für die Idee!
Sollte ich hinbekommen ;)

0

Was möchtest Du wissen?