próbując przypisać NaN do zmiennej na procesorze x64C++ NaN zmiany reprezentacją podczas przypisywania
*dest = *(float*)&sourceNaN;
gdzie
unsigned char sourceNaN[] = {00,00, 0xa0, 0x7f};
W instrukcji zmiennoprzecinkowych FLD i FSTP (obserwowane w demontażu) zmień bajt 0xa0 na 0xe0. Zatem miejsce docelowe ma dodatkowy zestaw bitów. Czy ktoś może wyjaśnić, dlaczego tak się dzieje? To jest aplikacja dla systemu Windows.
Zespół kod języka:
005C9B9C mov eax,dword ptr [ebp+10h]
005C9B9F fld dword ptr [ebp-80h]
005C9BA2 fstp dword ptr [eax]
Każdy powód, którego nie można po prostu przypisać bezpośrednio ze stałej [NaN] (http://stackoverflow.com/questions/16691207/c-c-nan-constant-literal)? – tadman
Jestem taki zdezorientowany. Przyjmujesz adres, rzucasz na "float *", a potem dereference? Czemu? – Daniel
Dlaczego nie robić tego inaczej, nie jest to pytanie. Dlaczego wynikowy zmiennoprzecinkowy ustawia dodatkowy bit. – Bruce