Unterscheidung zwischen Unendlichkeit und NaN
In den vorherigen Schritten haben wir über Double.isInfinite()
gelernt und wie die Division durch Null zu Unendlichkeit führen kann. Es gibt jedoch einen weiteren speziellen Wert in der Gleitkommaarithmetik namens NaN, was für "Not a Number" steht. NaN repräsentiert das Ergebnis einer undefinierten oder nicht darstellbaren Operation, wie z. B. die Division von Null durch Null oder die Wurzel aus einer negativen Zahl.
Es ist wichtig, zwischen unendlichen Werten und NaN unterscheiden zu können, da sie verschiedene Arten von Ausnahmeresultaten darstellen. Java bietet die Methode Double.isNaN()
, um zu prüfen, ob ein double
-Wert NaN ist.
Lassen Sie uns unser Programm ein letztes Mal ändern, um eine Berechnung einzubeziehen, die NaN ergibt, und zu sehen, wie man es von Unendlichkeit unterscheidet.
-
Öffnen Sie die Datei HelloJava.java
im WebIDE-Editor. Sie sollten sich im Verzeichnis ~/project
befinden.
-
Ersetzen Sie den aktuellen Code durch folgenden:
public class HelloJava {
public static void main(String[] args) {
double positiveInfinity = 10.0 / 0.0;
double nanResult = 0.0 / 0.0;
double finiteNumber = 5.0;
System.out.println("Result of 10.0 / 0.0: " + positiveInfinity);
System.out.println("Is 10.0 / 0.0 infinite? " + Double.isInfinite(positiveInfinity));
System.out.println("Is 10.0 / 0.0 NaN? " + Double.isNaN(positiveInfinity));
System.out.println("Result of 0.0 / 0.0: " + nanResult);
System.out.println("Is 0.0 / 0.0 infinite? " + Double.isInfinite(nanResult));
System.out.println("Is 0.0 / 0.0 NaN? " + Double.isNaN(nanResult));
System.out.println("Result of 5.0: " + finiteNumber);
System.out.println("Is 5.0 infinite? " + Double.isInfinite(finiteNumber));
System.out.println("Is 5.0 NaN? " + Double.isNaN(finiteNumber));
}
}
Hier ist eine Zusammenfassung der Änderungen:
double positiveInfinity = 10.0 / 0.0;
: Wir behalten die Division bei, die zu positiver Unendlichkeit führt.
double nanResult = 0.0 / 0.0;
: Diese Zeile führt die Division von Null durch Null durch, was NaN ergibt.
double finiteNumber = 5.0;
: Eine normale endliche Zahl zum Vergleich.
- Wir rufen jetzt für jedes Ergebnis neben
Double.isInfinite()
auch Double.isNaN()
auf.
-
Speichern Sie die Datei (Strg+S oder Cmd+S).
-
Kompilieren Sie das Programm im Terminal:
javac HelloJava.java
-
Führen Sie das Programm aus:
java HelloJava
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Result of 10.0 / 0.0: Infinity
Is 10.0 / 0.0 infinite? true
Is 10.0 / 0.0 NaN? false
Result of 0.0 / 0.0: NaN
Is 0.0 / 0.0 infinite? false
Is 0.0 / 0.0 NaN? true
Result of 5.0: 5.0
Is 5.0 infinite? false
Is 5.0 NaN? false
Diese Ausgabe zeigt deutlich den Unterschied zwischen unendlichen Werten und NaN. Double.isInfinite()
gibt nur für positive oder negative Unendlichkeit true
zurück, während Double.isNaN()
nur für NaN true
zurückgibt. Für eine endliche Zahl geben beide Methoden false
zurück. Das Verständnis dieser Unterscheidung ist entscheidend für die Behandlung möglicher Fehler und unerwarteter Ergebnisse in Gleitkomma-Berechnungen.