warum ist 24 * 60 * 60 * 1000 * 1000 dividiert durch 24 * 60 * 60 * 1000 ungleich 1000 in Java?warum ist 24 * 60 * 60 * 1000 * 1000 dividiert durch 24 * 60 * 60 * 1000 ungleich 1000 in Java?
Antwort
Da die Multiplikation 32 Bit Ganzzahlen überläuft. In 64 Bit ist es in Ordnung:
public class Test
{
public static void main(String[] args)
{
int intProduct = 24 * 60 * 60 * 1000 * 1000;
long longProduct = 24L * 60 * 60 * 1000 * 1000;
System.out.println(intProduct); // Prints 500654080
System.out.println(longProduct); // Prints 86400000000
}
}
Offensichtlich nach der Multiplikation überschwemmt hat, wird die Division geht, um diesen Überlauf nicht „rückgängig machen“.
Was bedeutet 1000 Tage * 1000 sowieso? –
Das müssen die neuen "metrischen Jahre" sein, über die sie immer reden. –
1000 Tage * 1000 wären 1.000.000 Tage. Das ist nichts Geheimnisvolles. Nun, 1000 Zoll × 1000 Zoll sind 1.000.000 Quadratzoll, also wären 1000 Tage × 1000 Tage 1.000.000 Quadrat-Tage. Aber ich bin mir nicht ganz sicher, was ein "quadratischer Tag" ist. Vielleicht ist das eine Maßeinheit, die Zeitreisende nutzen, wenn sie sich mit einem pan-dimensionalen Raum befassen. – Jay
Sie müssen mit 24L * 60 * beginnen, weil der Int überläuft.
Ihre Frage BTW ist ein copy/paste von Puzzle 3: Lange Abteilung von Java Puzzlers;)
+1 für lange Konstante, um lange statt int zu erzwingen. –
Wenn Sie diese Berechnung durchführen möchten, dann müssen Sie entweder wieder um die Operationen (Überlauf zu vermeiden) oder verwenden Sie einen größeren Datentyp. Das eigentliche Problem ist, dass die Arithmetik von Ganzzahlen fester Größe in Java nicht assoziativ ist; Es ist ein Schmerz, aber da ist der Kompromiss.
Nachbestellen der Zahlen wird nicht vermieden, den Überlauf – cherouvim
@ cherouvim, aber die Operationen neu ordnen könnte. – Nosredna
Ich glaube, Thom redet über die Neuordnung der Multiplikation, so dass Sie stattdessen etwas tun: ((24 * 60)/(24 * 60)) * ((1000 * 1000)/(1000 * 1000)) – DeadHead
- 1. Warum (360/24)/60 = 0 ... in Java
- 2. Java Timer Swing Genau 60 fps
- 3. DataTables.net Sicherheitsfehler „Code:“ 1000
- 4. Warum fix ((20.45-20) * 60) ist nicht gleich mit fix ((20) * 60) in MATLAB
- 5. So erstellen Sie eine Eigenmatrix der Größe 1000 * 1000
- 6. Achtung: Eingangsvariablen überschritten 1000
- 7. php: max_input_vars überschritten 1000
- 8. Facebook Connect Fehler: 1000
- 9. Render 1000+ Formen in opengl
- 10. Django machen 1000 doppelte Abfragen
- 11. Getting 1000 als eine Antwort anstelle von 1 beim Dividieren (6.022/6.022 = 1000) Java
- 12. Chart mit etwa 1000 Datenpunkten
- 13. myBATIS foreach Trefferlimit von 1000
- 14. Cloudflare + Reverse Proxy - Fehler 1000
- 15. Auslastungstest für 1000 gleichzeitige Benutzer
- 16. Beschleunigung der vergangenen 60 Tage in Pandas
- 17. Nanosleep Schlaf 60 Mikrosekunden zu lange
- 18. ASP.NET Lokalisierung stoppt nach ca. 60 Minuten
- 19. IndexError: Index 1000 ist außerhalb der Grenzen für Achse 0 mit der Größe 1000
- 20. Unterschied zwischen int * array [60] und int * array = new int (60);
- 21. Kindle Feuerangriffe und Texturbeschädigung bei 60 fps
- 22. MySQL Galera-Knoten nicht gestartet (Abbruch mit Fehler 'WSREP: [...]: 60: Fehler beim Erreichen der primären Ansicht: 60 (Zeitüberschreitung der Operation)')
- 23. Timer wird nach 60 Sekunden zurückgesetzt
- 24. PHP Scripting Timing nach 60 Sekunden
- 25. Match 0 bis 60 im regulären Ausdruck
- 26. Aufruf eine Funktion alle 60 Sekunden
- 27. Dialog nicht innerhalb von 60 Sekunden verfügbar
- 28. CSS Tortendiagramm Animation von 40% bis 60%
- 29. Long polling Windows Phone, 60 Sekunden TimeOut
- 30. Magento Curl Fehler 503 nach ~ 60 Sekunden
Da Java in Ost-West-Richtung erstreckt, so ist der Tag ein bisschen länger als 86400000000 Mikrosekunden :-) – balpha
Ich denke, für diese Frage sinnvoll zu sein muss angeben, dass es int bedeutet und nicht lang. Ohne tatsächlichen Code oder Angabe anzuzeigen, ist die Frage mehrdeutig. Das ist die Art von Frage, die ich bei Tests in der Schule hasste - soll ich antworten "es * ist * gleich 1000" (richtig, wenn man lange annimmt) oder soll ich raten, dass der Prof bedeuten soll, dass alles gemacht wird wie ints, und deshalb Überlauf erwähnen? –