NaN

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire
Wikipedia:Hauptseite
Dieser Artikel beschäftigt sich mit einem speziellen Wert von Gleitkommazahlen. Zu anderen 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 NaN geliefert, wenn ein Ergebnis nach mehreren, sich widersprechenden Regeln berechnet werden könnte, keine reelle Zahl (oder eine der beiden Unendlichkeiten) ergäbe, oder bereits 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 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 +Inf - +Inf (und -Inf + -Inf) lässt sich nach folgenden Regeln ausführen:
    Regel 1: +Inf - irgendeine-Zahl ist gleich +Inf
    Regel 2: -Inf + irgendeine-Zahl ist gleich -Inf
    Regel 3: x - x ist gleich 0 (für eine beliebige Zahl x)
    +Inf - +Inf müsste also gleich +Inf, -Inf und gleich 0 sein. Das ist ein Widerspruch. Deshalb wird als Ergebnis der Berechnung +Inf - +Inf ein NaN festgelegt.
  • Die Berechnung von +Inf / +Inf lässt sich nach folgenden Regeln ausführen:
    Regel 1: +Inf / irgendeine-positive-Zahl ist gleich +Inf
    Regel 2: x / x ist gleich 1 (für eine beliebige Zahl x)
    +Inf / +Inf müsste also gleich +Inf und gleich 1 sein. Das ist ein Widerspruch. Deshalb wird als Ergebnis der Berechnung +Inf / +Inf 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. Analog gilt dies 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-Gleitkommatyp SINGLE 223 NaNs gehören (das sind ungefähr 8 Millionen oder etwa 0,5 Promille aller SINGLE-Werte). Entsprechend gehören zum 64-Bit-Gleitkommattyp 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 754 nicht fest.

Man unterscheidet zwischen quiet NaNs (qNaN) und signalling NaNs (sNaN). Für quiet 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.

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net