Ich bin die 2
sehr große Zahl in Java-Multiplikation, aber der mehrfach Ausgang scheint wenig seltsam
-CodeMultipliziert große Anzahl in Java
long a = 2539586720l;
long b = 77284752003l;
a*=b;
System.out.println(a);
a=(long)1e12;
b=(long)1e12;
a*=b;
System.out.println(a);
Output:
-6642854965492867616
2003764205206896640
Im ersten Fall, warum das Ergebnis negativ ist, wenn es wegen Überlauf ist, wie kommt dann das Ergebnis der zweiten ist positiv? Bitte erläutern Sie dieses Verhalten? Code
Edit:
Ich verwende mod=100000000009
Betrieb noch negativ es ist?
Dies kann auf eine Kürzung zurückzuführen sein, da das Ergebnis nicht in einem 'long' gespeichert werden kann. Wenn 'lang' nicht genug ist. Versuchen Sie es mit 'BigInteger' –
@ redflar3 das ist kein Problem, das Hauptproblem ist, warum' negative 'im ersten Fall während' positive 'auf zweiten Fall –
lange halten kann (2^63-1, die 9e18 ist), wo als Ergebnis Ihrer ersten Multiplikation übersteigt 1e20. Dies führt zur Kürzung, daher ist das Ergebnis nicht korrekt. In ähnlicher Weise wird das zweite Ergebnis ebenfalls abgeschnitten, wie es 1e24 sein sollte. daher BigInteger verwenden –