NaN
Dieser Artikel beschäftigt sich mit einem speziellen Wert von Gleitkommazahlen. Für andere Bedeutungen des Wortes Nan, siehe Nan (Begriffsklärung).
NaN (engl. Not a Number) bedeutet "keine Zahl". Es handelt sich hierbei um einen speziellen Wert bestimmter Darstellungen von Gleitkommazahlen auf dem Computer, der als Ergebnis einer ungültigen Rechenoperation zurückgegeben wird. Insbesondere haben die heute weit verbreiteten Gleitkommadarstellungen nach IEEE 754 bzw. IEC 559 NaNs.
Als Ergebnis einer Berechnung wird immer dann ein NaN geliefert, wenn das Ergebnis nach mehreren, sich widersprechenden Regeln berechnet werden könnte, keine reelle Zahl (oder eine der beiden Unendlichkeiten) ergäbe, oder bereits ein NaN als Argument an der Berechnung beteiligt ist.
Dabei ist +Inf (für Infinity = unendlich) eine Gleitkommazahl, die sowohl extrem große Zahlen als auch einen positiv unendlichen Wert repräsentiert. Daneben gibt es -Inf für einen negativ unendlichen Wert.
Beispiele:
- Die Berechnung der Quadratwurzel aus einer negativen Zahl liefert ein NaN.
- Die Berechnung von +Inf · (+0) lässt sich nach folgenden Regeln ausführen:
- Regel 1: +Inf · irgendeine-positive-Zahl ist gleich +Inf
- Regel 2: irgendeine-positive-Zahl · (+0) ist gleich +0
- +Inf · (+0) müsste also gleich +Inf und gleich +0 sein. Das ist ein Widerspruch. Deshalb wird als Ergebnis der Berechnung +Inf · (+0) ein NaN festgelegt.
- die Berechnung von +0/+0 lässt sich nach folgenden Regeln ausführen:
- Regel 1: +0 / irgendeine-positive-Zahl ist gleich +0
- Regel 2: irgendeine-positive-Zahl / +0 ist gleich +Inf
- Regel 3: x / x ist gleich 1 (für eine beliebige Zahl x)
- +0/+0 müsste also gleich +0, +Inf und gleich 1 sein. Das ist ein Widerspruch. Deshalb wird als Ergebnis der Berechnung +0/+0 ein NaN festgelegt. Dasselbe gilt für -0/-0, +0/-0 und -0/+0.
- Die Division einer anderen Zahl durch +0 oder -0 liefert zumindest bei IEEE-konformen Implementierungen keine NaN, sondern den speziellen Wert +Inf bzw. -Inf.
Es gibt nicht nur einen NaN-Wert, sondern viele verschiedene. Der Standard IEEE 754 schreibt vor, dass zum 32-Bit-Gleitpunkttyp float 223 NaNs gehören (das sind ungefähr 8 Millionen oder etwa 0,5 Promille aller float-Werte). Entsprechend gehören zum 64-Bit-Gleitpunkttyp double 252 NaNs (das sind ungefähr 4,5 Billiarden oder etwa 0,25 Promille aller double-Werte). Welche dieser NaNs bei welcher Berechnung geliefert wird, legt der Standard IEEE 744 nicht fest.
Man unterscheidet zwischen silent NaNs und signalling NaNs. Für silent NaNs liefern die meisten arithmetischen Operationen selber wiederum NaN zurück, wenn eines ihrer Argumente NaN ist. Der Gebrauch eines signalling NaN hingegen verursacht sofort einen Laufzeitfehler.
Vergleicht man ein NaN-wertiges Ergebnis mit sich selbst, dann besteht Ungleichheit.
NaN war die Kurzform der Firma Not A Number Technologies in Amsterdam. Die Firma wurde vor allem durch ihr 3D-Modellierungsprogramm Blender bekannt.
