2.16.3 | Eine Zahl, die keine ist: NaN |
Es gibt einige weitere arithmetische Operationen, die mathematisch nicht definiert sind und den Ergebniswert NaN liefern. Diese Abkürzung steht für »Not a Number«. Der Wert NaN hat eine recht merkwürdig anmutende Eigenschaft: Er ist ungleich zu allen Zahlen, sogar zu sich selbst. Der Ausdruck Float.NaN == Float.NaN ist also stets false! Zur Prüfung, ob eine Variable den Wert NaN hat, stellen die Klassen Float und Double die Methode isNaN() zur Verfügung.
Beispiele für das Auftreten von NaN sind Divisionen von Null durch Null, das Ergebnis von Math.sqrt(-1) oder auch die Addition von NEGATIVE_INFINITY und POSITIVE_INFINITY, wie die folgenden Anweisungen zeigen:float f; f = Float.NEGATIVE_INFINITY + Float.POSITIVE_INFINITY; System.out.println(f == Float.NaN); System.out.println(Float.isNaN(f)); System.out.println(Float.compare(f, Float.NaN)); System.out.println(Float.toString(f));Diese Anweisungen liefern die Ausgabefalse true 0 NaNHierbei ist zu beachten, dass zuerst false ausgegeben wird, obwohl die Variable f den Wert NaN hat! Die Ursache liegt im Ergebnis des Vergleichs f == float.NaN, der wie bereits gesagt, immer false ist. Die Methoden isNaN() und compare() liefern dagegen das intuitiv erwartete Ergebnis.