2016-06-18 24 views
6

Mein SSE-FPU folgende NaNs erzeugt:Fragen zu Operationen auf NaN

  • Wenn ich ein jeder Grund Dual-Betrieb wie ADDSD, SUBSD, MULSD oder DIVSD und einer der beiden Operanden ein NaN, das Ergebnis hat das Vorzeichen des NaN-Operanden und die unteren 51 Bits der Mantisse des Ergebnisses werden mit den unteren 51 Bits der Mantisse des NaN-Operanden geladen.
  • Wenn beide Operationen NaN sind, wird das Ergebnis mit dem Vorzeichen des Zielregisters geladen, und die unteren 51 Bits der Ergebnismantisse werden vor der Operation mit den unteren 51 Bits des Zielregisters geladen. Also zählt das assoziative Gesetz nicht, wenn man Multiplikationen mit zwei NaN-Operanden macht!
  • Wenn ich einen SQRTSD auf einem NaN-Wert mache, hat das Ergebnis das Vorzeichen des NaN-Operanden und die unteren 51 Bits des Ergebnisses werden mit den unteren 51 Bits des Operanden geladen.
  • Wenn ich eine Unendlichkeit mit Null oder Unendlich multipliziere, bekomme ich immer -NaN (binäre Darstellung 0xFFF8000000000000u).
  • Wenn ein Operand ein Signalisierungs-NaN ist, wird das Ergebnis zu einem ruhigen NaN, wenn die Ausnahme nicht maskiert ist.

Wird dieses Verhalten irgendwo im IEEE-754-Standard festgestellt?

+0

* Das Ergebnis wird zu einem ruhigen NaN, wenn die Ausnahme nicht maskiert ist *. Ich denke, du meinst "wenn die Ausnahme maskiert ist *. Du bekommst kein Ergebnis von Anweisungen, die SSE-Mathe-Ausnahmen auslösen. Ich denke, zumindest ein Teil davon ist in [Intels ISA-Handbüchern] dokumentiert (https: // www-ssl .intel.com/content/www/us/de/processors/architectures-software-developer-manuals.html), aber interessante Frage darüber, wieviel davon von IEEE-754 gefordert oder vorgeschlagen wird .. –

+0

Auch: Ich denke du meinst kommutativ, um die Tatsache zu beschreiben, dass normalerweise das Ergebnis von mul oder add nicht davon abhängt, welcher Operand das Ziel ist (FP mathe ist auch ohne NaNs nicht assoziativ; 'a + b + c kann nicht gleich c + b + sein a 'wegen Rundung anders) –

Antwort

6

NaN haben ein Zeichen und eine Nutzlast, zusammen, um die in den NaN enthaltenen Informationen aufgerufen werden.
Der ganze Sinn von NaNs ist, dass sie "klebrig" sind (vielleicht ist Monadisch ein besserer Begriff?), Wenn wir einmal ein NaN in einem Ausdruck haben, wird der ganze Ausdruck zu NaN.
Auch NaNs werden speziell bei der Bewertung von Prädikaten (wie binäre Relationen) behandelt, zum Beispiel wenn a NaN ist, dann ist es nicht gleich zu sich selbst.

Punkt 1
Aus dem IEEE 754:

Propagation der Diagnoseinformation erfordert, dass Informationen in dem NaNs erhalten durch arithmetische Operationen enthalten sein und Gleitkommaformat Konvertierungen.

Punkt 2
Aus dem IEEE 754:

Jede Operation, die einen oder zwei Eingänge NaNs, keiner von ihnen signalisiert, wird keine Ausnahme signalisiert aber, wenn ein Fließkommaergebnis zu liefern ist, soll als Ergebnis ein ruhiges NaN liefern, welches eines der NaNs sein sollte.

Keine Gleitkommaoperation war jemals assoziativ.
Ich glaube, Sie suchten nach dem Begriff kommutative obwohl Assoziativität erfordert mindestens drei Operanden beteiligt.

Punkt 3
Siehe auch Punkt 4

Punkt 4
Von IEEE 754:

Die ungültigen Operationen
1. Jede Operation an einem Signal-NAN sind (6.2)
2. Addition oder Subtraktion - Betrag Subtraktion von Unendlichkeiten wie (+ INFINITY) + (-Infinity)
3. Multiplikation - 0 × INFINITY
4. Division - 0/0 oder INFINITY/INFINITY
5. Rest - x REM y, wobei y Null oder x ist unendlich
6. Quadratwurzel, wenn der Operand kleiner als Null
7. die Umwandlung einen in einer ganzen Zahl oder Dezimalformat binären Gleitkommazahl ist, wenn Überlauf, Unendlichkeit, oder NaN in diesem Format eine getreue Darstellung ausschließt und dies kann nicht sonst wird signalisiert
8. Vergleich über Prädikate mit < oder>, ohne?, wenn die Operanden unordere sind d (5.7, Tabelle 4)

Punkt 5
Von IEEE 754:

Jede Operation eine Signalisierungs NaN oder ungültige Operation mit (7.1) ist, wenn tritt kein Fall und wenn ein Fließkomma-Ergebnis soll geliefert werden, ein ruhiges NaN als Ergebnis liefern.


Aufgrund seiner Bedeutung kann der IEEE 754-Standard here finden.

+0

Ich fand die IEEE-754-2008 Spezifikation hier: http://www.csee.umbc.edu/~tsimo1/CMSC455/IEEE-754-2008.pdf - es scheint genauer zu sein –

+0

@BonitaMontero Dank Bonita, kann ich nicht auf diesen Server zugreifen, obwohl: 403. –

+0

Ich fand eine interessante Sache: Wenn ich es tue eine Operation an zwei Operanden mit der x87-FPU und beide sind NaN, die Mantisse des resultierenden ruhigen NaN ist der größere Wert von 51 Bit beider Operanden. Welche Drogen rauchten sie bei Intel? –