ArithmeticException in Java geworfen
-
23-09-2019 - |
Frage
In Java (Anzahl / 0) löst eine ArithmeticException while (Anzahl / 0.0) = Unendlichkeit. Warum geschieht das?
Lösung
Da IEEE-754-Gleitkommazahlen eine Darstellung für die Unendlichkeit, während ganze Zahlen nicht.
Mit anderen Worten stellt jedes Bitmuster in int
eine normale ganze Zahl ist; Fließkommazahlen sind eher kompliziert mit +/- unendlich „keine Zahl“ (NaN) Werte normalisierten Werte, subnormale Werte etc.
Andere Tipps
Der IEEE-Gleitkomma-Standard, unterstützt von fast alle modernen Prozessoren, gibt an, dass jede Gleitkomma-Rechenoperation, einschließlich Division durch Null, ein gut definiertes Ergebnis hat. Der Standardträger unterzeichnete Null sowie Unendlich und NaN (keine Zahl). Es gibt zwei Nullen, +0 (positive Null) und -0 (negative Null), und dies entfernt jegliche Mehrdeutigkeit beim Dividieren. In IEEE 754-Arithmetik, a ÷ +0 positiv Unendlich ist, wenn eine positive, negative Unendlichkeit, wenn eine negativ ist, und NaN wenn a = ± 0. Die Unendlichkeit Zeichen ändern, wenn Division durch -0 statt.
Integer Division durch Null wird in der Regel anders als Gleitkomma gehandhabt, da es keine Ganzzahl-Darstellung für das Ergebnis. Einige Prozessoren erzeugen eine Ausnahme, wenn versucht wird, eine ganze Zahl von Null zu teilen, obwohl andere werden einfach weiter und ein falsches Ergebnis für die Division generieren. Das Ergebnis hängt davon ab, wie Division implementiert ist, und kann entweder Null oder manchmal die größte mögliche ganze Zahl ist.
Sie können auch die JLS überprüfen, die sagt:
15.17.2 Abteilung Operator
Auf der anderen Seite, wenn der Wert des Divisors in einer ganzzahligen Division 0 ist, dann
ein ArithmeticException geworfen wird.
Das Ergebnis einer Gleitkomma-Teilung durch die Spezifikation der ermittelten
IEEE-Arithmetik:
Wenn das Ergebnis nicht NaN ist, ist das Vorzeichen des Ergebnisses positiv, wenn beide Operanden
das gleiche Vorzeichen, negativ, wenn die Operanden unterschiedliche Vorzeichen.
Aufteilung eines Nicht-Null-endlichen Wert durch eine Null führt zu einer signierten Unendlichkeit.
Das Vorzeichen wird durch die Regel oben angegeben bestimmt.