Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

NaN

Lässt man den komplexen Zahlenraum als Ergebnis zu, ergibt sich eine imaginäre Zahl, die eben nicht als reelle Zahl bzw. Gleitkommazahl darstellbar ist und …

Inhalt4 Abschnitte
  1. 1. Bedeutung und Arten
  2. 2. Darstellung nach IEEE 754
  3. 3. Ursachen und Sonderfälle
  4. 4. Erkennung im Programm

Bedeutung und Arten

NaN („Not a Number“, auf Deutsch „Keine Zahl“) ist in der Informationstechnik ein besonderer numerischer Wert. Er steht für ein undefiniertes oder im verwendeten Zahlenformat nicht darstellbares Ergebnis und tritt vor allem bei Berechnungen mit Gleitkommazahlen auf. Systematisch verwendet wird NaN seit der Einführung des Gleitkommazahlenstandards IEEE 754 im Jahr 1985. Dieser Standard stellt auch andere nicht-finite Größen wie Unendlichkeit symbolisch dar.

Es gibt zwei Arten: Eine stille NaN (quiet NaN) wird als Ergebnis einer ungültigen Operation eingesetzt. Eine anzeigende NaN (signaling NaN) wird Variablen zugewiesen, die nicht ausdrücklich initialisiert wurden. NaN kann außerdem als Platzhalter für einen fehlenden Wert dienen.

Ein typisches Beispiel ist 0/0: Dieser Ausdruck ist als reelle Zahl undefiniert und wird daher durch NaN dargestellt. Auch die Quadratwurzel einer negativen Zahl führt bei einer reellen Gleitkommaoperation zu NaN. Im komplexen Zahlenraum wäre das Ergebnis zwar eine imaginäre Zahl, es ist aber nicht als reelle Gleitkommazahl darstellbar. Enthält mindestens ein Argument einer mathematischen Operation bereits NaN, ist auch das Ergebnis NaN.

Darstellung nach IEEE 754

NaN ist nicht dasselbe wie Unendlichkeit. Beide sind zwar Sonderfälle der Gleitkommadarstellung und erfordern besondere Regeln bei Berechnungen, doch eine ungültige Operation unterscheidet sich von einem arithmetischen Überlauf oder Unterlauf. Ein Überlauf kann Unendlich ergeben. Ein Unterlauf kann die kleinste normalisierte Zahl, eine denormalisierte Zahl oder Null ergeben.

Bei einer IEEE-754-NaN besteht das Exponentenfeld vollständig aus Einsen. Das ist auch bei Unendlichkeit der Fall. Zur Unterscheidung enthält der Signifikant bei NaN jedoch irgendeinen Wert ungleich Null. Dadurch können viele verschiedene NaN-Werte dargestellt werden, deren Bits im Signifikanten sich unterscheiden. Das Vorzeichenbit wird vom Standard bei NaNs ignoriert.

Bei einfacher Genauigkeit mit 32 Bit kann das Bitmuster einer NaN so aussehen: s111 1111 1axx xxxx xxxx xxxx xxxx xxxx. Dabei bezeichnet s das meist ignorierte Vorzeichen, a die Art der NaN und x die Nutzdaten, die ebenfalls meistens ignoriert werden. Für a = 1 liegt eine stille NaN vor. Für a = 0 und Nutzdaten ungleich Null handelt es sich um eine anzeigende NaN.

Ursachen und Sonderfälle

NaNs entstehen insbesondere in folgenden Fällen:

• Eine Operation erhält mindestens ein NaN als Operanden.

• Nichtdeterminierte Formen werden berechnet, darunter 0/0, ±∞/±∞, 0 × ±∞ und ±∞ × 0.

• Unendlichkeiten mit entgegengesetztem Vorzeichen werden addiert, also ∞ + −∞ oder −∞ + ∞. Das gilt ebenso für die dazu äquivalenten Subtraktionen.

• Eine reelle Operation hätte ein komplexes Ergebnis. Beispiele sind die Quadratwurzel oder der Logarithmus einer negativen Zahl.

• Eine Funktion wird außerhalb ihres reellen Definitionsbereichs verwendet. Der inverse Sinus oder Kosinus führt bei einem Argument kleiner als −1 oder größer als +1 zu NaN. Beim inversen hyperbolischen Tangens gilt dies für Argumente kleiner gleich −1 oder größer gleich +1, beim inversen hyperbolischen Kosinus für Argumente kleiner als +1.

Für Potenzen enthält der Standard besondere Festlegungen: Die Standardfunktion pow und die Ganzzahl-Exponentenfunktion pown definieren 0⁰, 1^∞ und ∞⁰ jeweils als 1; diese Ausdrücke ergeben dort also nicht NaN.

NaN kann auch ausdrücklich einer Variablen zugewiesen werden, typischerweise zur Darstellung eines fehlenden Wertes. Vor IEEE 754 verwendeten Programmierer dafür oft willkürlich gewählte Zahlen wie −99999999. Weil solche Spezialwerte nicht einheitlich festgelegt waren, war nicht gewährleistet, dass alle Programme und Programmierer sie konsistent und korrekt behandelten.

Erkennung im Programm

Nach einer Empfehlung des IEEE-Standards soll eine Funktion isnan() zur Verfügung stehen, mit der geprüft werden kann, ob ein Wert NaN ist. Eine weitere Erkennungsmöglichkeit beruht auf einer besonderen Vergleichseigenschaft: NaNs sind die einzigen Zahlen x, für die der Vergleich x ≠ x wahr ist.

In C ist isnan() in math.h deklariert, in Delphi beziehungsweise Lazarus in der Unit Math. Für eine Gleitkommavariable value sind deshalb die Abfragen isnan(value) und value != value gleichwertig. Ist die jeweilige Bedingung erfüllt, enthält value eine NaN, sodass das Programm eine passende Fehlerbehandlung ausführen kann.

Weiterlesen

Informationstechnik Informationstechnik (kurz IT) steht für die Technik zur Elektronischen Datenverarbeitung (EDV) und der hierzu verwendeten Hard- und Software-Infrastruktur. Datentyp Die Konkretisierung der Operationsmenge führt zu Abstrakten Datentypen beziehungsweise Algebraischen Strukturen. Mit der weiteren Konkretisierung der … Gleitkommazahl Gleitkommazahlen bestehen aus einer festen Anzahl von Ziffern, die gemäß dem Stellenwertsystem den Wert der Zahl angeben, sowie der Angabe, um wie viele Stellen … IEEE 754 Die Norm IEEE 754 definiert Standarddarstellungen für binäre und dezimale Gleitkommazahlen in Computern und legt genaue Verfahren für die Durchführung … Reelle Zahl Die reellen Zahlen bilden einen in der Mathematik bedeutenden Zahlenbereich. Er ist eine Erweiterung des Bereichs der rationalen Zahlen, womit die Maßzahlen … Komplexe Zahl Die komplexen Zahlen stellen eine Erweiterung der reellen Zahlen dar. Ziel der Erweiterung ist es, algebraische Gleichungen wie x 2 + 1 = 0 {\displaystyle … Imaginäre Zahl Eine (rein) imaginäre Zahl (auch Imaginärzahl, lat. numerus imaginarius) ist eine komplexe Zahl, deren Quadrat eine nichtpositive reelle Zahl ist. Null Die Zahl Null ist die Anzahl der Elemente in einer leeren Ansammlung von Objekten, mathematisch gesprochen die Kardinalität der leeren Menge. Potenz (Mathematik) Eine Potenz (von lateinisch potentia ‚Vermögen, Macht') ist das Ergebnis des Potenzierens (der Exponentiation), das wie das Multiplizieren seinem Ursprung … Logarithmus Der diskrete Logarithmus ist in endlichen Körpern und darauf definierten elliptischen Kurven erheblich aufwändiger zu berechnen als seine Umkehrfunktion, die … C (Programmiersprache) C ist eine imperative und prozedurale Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories entwickelte.