Na N.

In der Computerwissenschaft ist NaN, nicht für eine Zahl eintretend, ein numerischer Datentyp-Wert, der einen unbestimmten oder Unrepresentable-Wert besonders in Schwimmpunkt-Berechnungen vertritt. Der systematische Gebrauch von NaNs wurde durch den IEEE 754 Schwimmpunkt-Standard 1985 zusammen mit der Darstellung anderer nichtbegrenzter Mengen wie Unendlichkeit eingeführt.

Zwei getrennte Arten von NaNs werden zur Verfügung gestellt, hat ruhigen NaNs und SignalnaNs genannt. Ruhige NaNs werden verwendet, um Fehler fortzupflanzen, die sich aus ungültigen Operationen oder Werten ergeben, wohingegen Nachrichtenübermittlung NaNs fortgeschrittene Eigenschaften wie das Mischen numerischer und symbolischer Berechnung oder anderer Erweiterungen auf die grundlegende Fließkommaarithmetik unterstützen kann. Zum Beispiel ist 0/0 als eine reelle Zahl, und so vertretener von NaN unbestimmt; die Quadratwurzel einer negativen Zahl ist imaginär, und so als eine echte Schwimmpunkt-Zahl nicht wiederpräsentabel, und wird so von NaN vertreten; und NaNs kann verwendet werden, um fehlende Werte in der Berechnung zu vertreten.

Das Schwimmen des Punkts

In Schwimmpunkt-Berechnungen ist NaN nicht dasselbe als Unendlichkeit, obwohl beide normalerweise als spezielle Fälle in Schwimmpunkt-Darstellungen von reellen Zahlen sowie in Schwimmpunkt-Operationen behandelt werden. Eine ungültige Operation ist auch nicht dasselbe als eine arithmetische Überschwemmung (der eine Unendlichkeit zurückgeben könnte) oder ein arithmetischer Unterlauf (der die kleinste normale Zahl, eine denormal Zahl oder Null zurückgeben würde).

IEEE 754 NaNs werden mit dem Exponentialfeld vertreten, das mit (wie Unendlichkeitswerte), und eine Nichtnullzahl im significand gefüllt ist (um sie zu machen, verschieden von Unendlichkeitswerten); diese Darstellung erlaubt die Definition von vielfachen verschiedenen Werten von NaN, abhängig von denen Bit im significand gesetzt werden, sondern auch auf dem Wert des Hauptzeichens hat gebissen (nicht, sind alle Anwendungen erforderlich, verschiedene Semantik für jene verschiedenen Werte von NaN zur Verfügung zu stellen).

Zum Beispiel würde ein mit dem Bit kluges Beispiel einer IEEE einfachen Schwimmpunkt-Standardpräzision (32 Bit) NaN sein: Wo s das Zeichen (meistenteils ignoriert in Anwendungen), ein Bestimmen des Typs von NaN ist, und x eine Extranutzlast (meistenteils ignoriert in Anwendungen) ist. Wenn = 1 es ruhiger NaN ist; wenn Null ist und die Nutzlast Nichtnull ist, dann ist es SignalnaN.

Das Schwimmen von Punkt-Operationen außer bestellten Vergleichen pflanzt normalerweise ruhigen NaN (qNaN) fort. Das Schwimmen von Punkt-Operationen auf SignalnaN (sNaN) gibt einer ungültigen Operationsausnahme Zeichen, die Verzug-Ausnahme-Handlung ist dann dasselbe bezüglich qNaN operands, und sie erzeugen einen qNaN, wenn sie ein Schwimmpunkt-Ergebnis erzeugen.

Ein Vergleich mit NaN gibt immer ein nicht eingeordnetes Ergebnis selbst wenn das Vergleichen mit sich zurück. Die Vergleich-Prädikate signalisieren entweder oder nichtsignalisieren, die Signalversionen geben einer ungültigen Ausnahme für solche Vergleiche Zeichen. Die Gleichheits- und Ungleichheitsprädikate nichtsignalisieren, so x = x das falsche Zurückbringen kann verwendet werden, um zu prüfen, wenn x ruhiger NaN ist. Die anderen Standardvergleich-Prädikate signalisieren alle, ob sie NaN operand empfangen, stellt der Standard auch Nichtsignalversionen dieser anderen Prädikate zur Verfügung. Das Prädikat isNaN (x) bestimmt, ob ein Wert NaN ist und nie einer Ausnahme Zeichen gibt, selbst wenn x SignalnaN ist.

Die Fortpflanzung von ruhigem NaNs durch arithmetische Operationen erlaubt Fehlern, am Ende einer Folge von Operationen ohne umfassende Prüfung während Zwischenstufen entdeckt zu werden. Bemerken Sie jedoch, dass abhängig von der Sprache und der Funktion NaNs in Ausdrücken still entfernt werden kann, die ein unveränderliches Ergebnis für alle anderen Schwimmpunkt-Werte z.B geben würden. NaN^0, der als 1, so im Allgemeinen ein späterer Test auf eine Satz-INVALIDE-Fahne definiert werden kann, ist erforderlich, um alle Fälle zu entdecken, wo NaNs eingeführt werden (sieh Abteilungsfunktionsdefinition unten für weitere Details).

Im Abschnitt 6.2 des revidierten IEEE ist 754-2008 Standard dort zwei anomale Funktionen (der maxnum und die Minnum-Funktionen, der das Maximum von zwei operands zurückgibt, die, wie man erwartet, Zahlen sind), dass Bevorzugungszahlen — wenn gerade einer der operands NaN dann der Wert des anderen operand ist, zurückgegeben werden.

NaN 'Werkzeugkasten' für die GNU-Oktave und MATLAB lässt ganzen NaNs wenn Rechenanhäufungen (wie Durchschnitte, Standardabweichungen, usw.) aus. Wie man annimmt, vertreten NaNs fehlende Werte, und so ignorieren die statistischen Funktionen NaNs in den Daten, anstatt sie fortzupflanzen.

Entwicklung

Es gibt drei Arten von Operationen, die NaN zurückgeben können:

  • Operationen mit NaN als mindestens ein operand.
  • Unbestimmte Formen
  • Die Abteilungen 0/0 und ± /±
  • Die Multiplikationen 0×±  und ±  ×0
  • Die Hinzufügungen  + (), () +  und gleichwertige Subtraktionen
  • Der Standard hat alternative Funktionen für Mächte:
  • Die Standardfunktion und die Hochzahl-Funktion der ganzen Zahl definieren 0, 1, und  als 1.
  • Die Funktion definiert alle drei unbestimmten Formen als ungültige Operationen und gibt so NaN zurück.
  • Echte Operationen mit komplizierten Ergebnissen, zum Beispiel:
  • Die Quadratwurzel einer negativen Zahl.
  • Der Logarithmus einer negativen Zahl
  • Der umgekehrte Sinus oder Kosinus einer Zahl, die weniger als 1 oder größer ist als +1.

NaNs kann auch Variablen normalerweise als eine Darstellung ausführlich zugeteilt werden, um Werte zu verpassen. Vor dem IEEE Standard haben Programmierer häufig einen speziellen Wert (solcher als 99999999) verwendet, um unbestimmte oder fehlende Werte zu vertreten, aber es gab keine Garantie, dass sie durchweg oder richtig behandelt würden.

NaNs werden in allen obengenannten Fällen nicht notwendigerweise erzeugt. Wenn eine Operation eine Ausnahme-Bedingung erzeugen kann und Fallen dann nicht maskiert werden, wird die Operation eine Falle stattdessen verursachen. Wenn ein operand ruhiger NaN ist, und es nicht auch SignalnaN operand gibt, dann gibt es keine Ausnahme-Bedingung, und das Ergebnis ist ruhiger NaN. Ausführliche Anweisungen werden keine Ausnahme verursachen, sogar für NaNs Zeichen zu geben.

Ruhiger NaN

Beruhigen Sie NaNs oder qNaNs, erheben Sie keine zusätzlichen Ausnahmen, weil sie sich durch die meisten Operationen fortpflanzen. Die Ausnahmen sind, wo NaN unverändert zur Produktion, solcher als in Format-Konvertierungen oder bestimmten Vergleich-Operationen nicht einfach durchgeführt werden kann (die keinen Eingang von NaN "erwarten").

Nachrichtenübermittlung NaN

Die Nachrichtenübermittlung NaNs oder sNaNs, ist spezielle Formen von NaN, der, wenn verbraucht, durch die meisten Operationen eine ungültige Ausnahme und dann, wenn passend, erheben sollte, in einen qNaN "beruhigt" zu werden, der sich dann fortpflanzen kann. Sie wurden in IEEE 754 eingeführt. Es hat mehrere Ideen dafür gegeben, wie diese verwendet werden könnten:

  • Die Füllung uninitialisierten Gedächtnisses mit der Nachrichtenübermittlung NaNs würde eine ungültige Ausnahme erzeugen, wenn die Daten verwendet werden, bevor es initialisiert wird
  • Mit einem sNaN als ein Platzhalter für einen mehr komplizierten Gegenstand, wie:
  • Eine Darstellung einer Zahl, die underflowed hat
  • Eine Darstellung einer Zahl, die überflutet hat
  • Die Zahl in einer höheren Präzision formatiert
  • Eine komplexe Zahl

Wenn gestoßen, konnte ein Falle-Dressierer den sNaN decodieren und einen Index ins geschätzte Ergebnis zurückgeben. In der Praxis konfrontiert diese Annäherung mit vielen Komplikationen. Die Behandlung des Zeichen-Bit von NaNs für einige einfache Operationen (wie absoluter Wert) ist davon für arithmetische Operationen verschieden. Fallen sind durch den Standard nicht erforderlich. Es gibt andere Annäherungen an diese Sorte des Problems, das mehr tragbar sein würde.

Funktionsdefinition

Es gibt Meinungsverschiedenheit über die richtige Definition für das Ergebnis einer numerischen Funktion, die ruhigen NaN, wie eingegeben, empfängt. Eine Ansicht besteht darin, dass sich NaN zur Produktion der Funktion in allen Fällen fortpflanzen sollte, um die Anzeige eines Fehlers fortzupflanzen. Eine andere Ansicht, und ein genommener nach dem IEEE Standard im Allgemeinen, besteht darin, dass, wenn die Funktion vielfache Argumente und die Produktion hat, durch alle Non-NaN-Eingänge einschließlich der Unendlichkeit einzigartig bestimmt wird, dann sollte dieser Wert das Ergebnis sein. So zum Beispiel ist der Wert, der durch hypot (± , qNaN) und hypot (qNaN, ± ) zurückgegeben ist, + .

Das Problem ist für die Exponentiation-Funktion besonders akut. Die Ausdrücke 0,  und 1 werden als unbestimmte Formen betrachtet, wenn sie als Grenzen (gerade wie  × 0), und die Frage dessen vorkommen, ob die Null zur Nullmacht definiert werden sollte, weil 1 Meinung geteilt hat.

Wenn die Produktion als unbestimmt betrachtet wird, wenn ein Parameter unbestimmt ist, dann sollte einen qNaN erzeugen. Jedoch normalerweise sind Mathebibliotheken 1 für für jede reelle Zahl y zurückgekehrt, und selbst wenn y Unendlichkeit oder - Unendlichkeit ist. Ähnlich erzeugen sie 1 dafür, selbst wenn x 0 oder Unendlichkeit ist. Das Grundprinzip, für den Wert 1 für die unbestimmten Formen zurückzugeben, war, dass der Wert von Funktionen an einzigartigen Punkten als ein besonderer Wert genommen werden kann, wenn dieser Wert in der Grenze der Wert für alle außer einem vanishingly kleinen Teil eines Balls um den Grenzwert der Rahmen ist. Die 2008-Version des IEEE sagt 754 Standard, dass und beide 1 zurückkehren sollte, da sie 1 zurückgeben, was auch immer sonst statt ruhigen NaN verwendet wird.

Um diejenigen zu befriedigen, die eine strengere Interpretation dessen wünschen, wie die Potenzfunktion handeln sollte, definiert der 2008-Standard zwei zusätzliche Potenzfunktionen; wo die Hochzahl eine ganze Zahl sein muss, und der NaN zurückgibt, wann auch immer ein Parameter NaN ist oder der exponentiation eine unbestimmte Form geben würde.

Ganze Zahl NaN

Die meisten festen großen Formate der ganzen Zahl haben keinen Weg, ausführlich ungültige Daten anzuzeigen.

Das Paket von BigInt von Perl verwendet "NaN" für das Ergebnis von Schnuren, die gültige ganze Zahlen nicht vertreten.

Anzeige

Verschiedene Betriebssysteme und Programmiersprachen können verschiedene Schnur-Darstellungen von NaN haben.

nan

NaN

NaN%

NAN

NaNQ

NaNS

qNaN

sNaN

1.#SNAN 1.#QNAN -1.#IND

Seitdem, in der Praxis, haben verschlüsselte NaNs sowohl ein Zeichen als auch fakultative 'diagnostische Information' (manchmal hat eine Nutzlast genannt), diese werden häufig in Schnur-Darstellungen von NaNs auch zum Beispiel gefunden:

- NaN

NaN12345

- sNaN12300

- NaN (s1234)

(andere Varianten bestehen)

Verschlüsselung

In IEEE 754 Standardanpassen, das Punkt-Lagerungsformate schwimmen lässt, werden NaNs durch spezifische, vorherbestimmte zu NaNs einzigartige Bit-Muster identifiziert. Das Zeichen hat gebissen ist nicht von Bedeutung. Binäres Format NaNs wird mit dem Exponentialfeld vertreten, das mit (wie Unendlichkeitswerte), und eine Nichtnullzahl im significand gefüllt ist (um sie zu machen, verschieden von Unendlichkeitswerten). Der ursprüngliche IEEE hat 754 Standard von 1985 (IEEE 754-1985) nur binäre Schwimmpunkt-Formate beschrieben und hat nicht angegeben, wie Zeichen gegeben/beruhigt hat, dass Staat markiert werden sollte. In der Praxis hat das bedeutendste Bit des significand bestimmt, ob NaN signalisiert oder sich beruhigen. Zwei verschiedene Durchführungen, mit umgekehrten Bedeutungen, haben resultiert.

  • die meisten Verarbeiter (einschließlich derjenigen des Intel/AMD x86-32/x86-64 Familie, Motorola 68000 Familie, das ZIEL Familie von PowerPC, die ARM-Familie und die Sonne SPARC Familie) gehen unter hat Bit zur Nichtnull Zeichen gegeben/beruhigt, wenn NaN, und zur Null ruhig ist, wenn NaN signalisiert. So, auf diesen Verarbeitern, vertritt das Bit eine 'is_quiet' Fahne.
  • in NaNs, der vom PAPA-RISC und den MIPS Verarbeitern, erzeugt ist, hat Zeichen gegeben/beruhigt, dass Bit Null ist, wenn NaN, und Nichtnull ruhig ist, wenn NaN signalisiert. So, auf diesen Verarbeitern, vertritt das Bit eine 'is_signaling' Fahne.

Die 2008-Revision des IEEE 754 Standard (IEEE 754-2008) macht formelle Empfehlungen für die Verschlüsselung, hat Bit Zeichen gegeben/beruhigt.

  • Für binäre Formate folgt der Standard der Interpretation als eine 'is_quiet' Fahne. D. h. hat Zeichen gegeben/beruhigt, dass Bit Nichtnull ist, wenn NaN, und Null ruhig ist, wenn NaN signalisiert. 'Ist - ruhiges' Bit sollte das bedeutendste Bit des significand sein.
  • Für dezimale Formate, entweder binär oder verschlüsselte Dezimalzahl, wird NaN identifiziert, indem er die fünf ersten Bit des Kombinationsfeldes nach dem Zeichen-Bohrersatz zu gehabt wird. Das sechste Bit des Feldes ist die 'is_quiet' Fahne. Der Standard folgt der Interpretation als eine 'is_signaling' Fahne. D. h. hat Zeichen gegeben/beruhigt, dass Bit Null ist, wenn NaN ruhig ist, und Nichtnull, wenn der N identifiziert wird, indem er gehabt wird, signalisiert.

Der Staat/Wert der restlichen Bit (d. h. anders als diejenigen hat gepflegt, NaN als NaN, einschließlich der beruhigen/Zeichen geben Bit zu identifizieren), wird durch den Standard nicht definiert, außer dass sie die ganze Null nicht sein müssen. Dieser Wert wird die 'Nutzlast' von NaN genannt, und die Empfehlung ist, den Wert des ersten qNaN operand durch Operationen zu passieren, wenn sie eine Produktion qNaN erzeugt, um mit dem Beseitigen zu helfen.

Außenverbindungen


Die Planeten / Biologischer Determinismus
Impressum & Datenschutz