Macht Java Rechenfehler beim Potenzieren und Mod?

Diskutiere Macht Java Rechenfehler beim Potenzieren und Mod? im Java Basics - Anfänger-Themen Bereich.
E

ernst

Hallo allerseits,
Java berechnet in dem folgenden Programmausschnitt x und y:
int x;
int y;

x = (int)(Math.pow((double)33, (double)11)%155);
y = (int)(Math.pow((double)8, (double)7)%341);

x wird zu 1 berechnet, richtig wäre aber 2
y wird zu 1 berechnet, richtig wäre aber 2


Frage:
Was muß ich machen, damit es keine Rechnefehler gibt?

mfg
Ern
 
L

LimDul

Du läufst wahrscheinlich gerade in die Fallstricke der Fließkomma-Arithmetik rein. Gib dir die Zwischenergebnisse mal aus, vor allem beim ersten Wert (33 hoch 11) befürchte, ich dass der gar nicht so genau dargestellt wird, dass du darauf eine sinnvolle Modulo Operation machen kannst.

Da nur mit ganzahligen Werten arbeitest bei der pow-Funktion, würde ich dir raten auf BigDecimal umzusteigen und damit zu rechnen. BigDecimal ist nämlich genau (bei ungenauen Rechenoperationen muss daher dort immer zwingend angeben wann und wie gerundet werden soll).
 
Flown

Flown

Nachdem hier überhaupt keine floats herumfliegen:
Java:
int x = BigInteger.valueOf(33L).modPow(BigInteger.valueOf(11L), BigInteger.valueOf(155L)).intValue();
int y = BigInteger.valueOf(8L).modPow(BigInteger.valueOf(7L), BigInteger.valueOf(341L)).intValue();
 
E

ernst

Nachdem hier überhaupt keine floats herumfliegen:
Java:
int x = BigInteger.valueOf(33L).modPow(BigInteger.valueOf(11L), BigInteger.valueOf(155L)).intValue();
int y = BigInteger.valueOf(8L).modPow(BigInteger.valueOf(7L), BigInteger.valueOf(341L)).intValue();
Habe es auch mit BigInteger gemacht:
BigInteger basis2 = new BigInteger("8");
BigInteger hochzahl2 = new BigInteger("7");
BigInteger rest2 = new BigInteger("341");
BigInteger erg2;
erg2=basis2.modPow(hochzahl2, rest2);
System.out.println("erg2="+erg2);

Aber deine Lösung ist noch besser, da du das Ergebnis in int umwandelst!

mfg
Ern
 
Thema: 

Macht Java Rechenfehler beim Potenzieren und Mod?

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben