Bei dem Versuch, ein NaN auf eine Variable auf einem x64-Prozessor in der DemontageC++ NaN Bytedarstellung Änderungen bei der Zuordnung
*dest = *(float*)&sourceNaN;
wo
unsigned char sourceNaN[] = {00,00, 0xa0, 0x7f};
Die Gleitkommabefehle fld und FSTP (gesehen zuzuweisen) Ändern Sie das 0xa0-Byte in ein 0xe0. Somit hat das Ziel ein zusätzliches Bit gesetzt. Kann jemand erklären, warum das passiert? Dies ist eine Windows-Anwendung.
der Assemblersprachcode:
005C9B9C mov eax,dword ptr [ebp+10h]
005C9B9F fld dword ptr [ebp-80h]
005C9BA2 fstp dword ptr [eax]
Jeder Grund, den Sie nicht direkt von der [NaN-Konstante] (http://stackoverflow.com/questions/16691207/c-c-nan-constant-literal) zuweisen können? – tadman
Ich bin hier so verwirrt. Du nimmst die Adresse, wirfst zu einem 'float *' und dann dereferenziertest du? Warum? – Daniel
Warum nicht anders ist nicht die Frage. Warum das resultierende Gleitkomma das zusätzliche Bit setzt, ist. – Bruce