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?
* 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 .. –
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) –