nel tentativo di assegnare un NaN a una variabile su un processore x64C++ NaN rappresentazione byte variazioni intervenute assegnazione
*dest = *(float*)&sourceNaN;
dove
unsigned char sourceNaN[] = {00,00, 0xa0, 0x7f};
Le istruzioni di virgola mobile FLD e FSTP (visibili nel disassemblaggio) cambia il byte 0xa0 in un 0xe0. Quindi la destinazione ha un bit in più impostato. Qualcuno può spiegare perché questo sta accadendo? Questa è un'applicazione Windows.
Il codice di linguaggio assembly:
005C9B9C mov eax,dword ptr [ebp+10h]
005C9B9F fld dword ptr [ebp-80h]
005C9BA2 fstp dword ptr [eax]
Qualsiasi motivo non è possibile assegnare direttamente dalla [costante NaN] (http://stackoverflow.com/questions/16691207/c-c-nan-constant-literal) direttamente? – tadman
Sono così confuso qui. Prendi l'indirizzo, esegui il cast in un 'float *', e poi dereferenzia? Perché? – Daniel
Perché non farlo in modo diverso non è la domanda. Perché il virgola mobile risultante imposta il bit aggiuntivo è. – Bruce