Bru*_*uce 9 c++ floating-point nan
尝试将NaN分配给x64处理器上的变量
*dest = *(float*)&sourceNaN;
Run Code Online (Sandbox Code Playgroud)
哪里
unsigned char sourceNaN[] = {00,00, 0xa0, 0x7f};
Run Code Online (Sandbox Code Playgroud)
浮点指令fld和fstp(在反汇编中看到)将0xa0字节更改为0xe0.因此,目的地有一个额外的位设置.有人可以解释为什么会这样吗?这是一个Windows应用程序.
汇编语言代码:
005C9B9C mov eax,dword ptr [ebp+10h]
005C9B9F fld dword ptr [ebp-80h]
005C9BA2 fstp dword ptr [eax]
Run Code Online (Sandbox Code Playgroud)
Sne*_*tel 11
0x7fa00000是信号NaN("sNaN").0x7fe00000是一个安静的NaN("qNaN").我没有在x86下听说过这种行为,但是在ARM sNaNs中,当在操作中使用时会转换为qNaNs,同时引发FP异常(通常会被忽略).这看起来像是在发生同样的事情.
好消息是,他们都是NaN.除非你特别依赖信号行为,否则一切都正常.
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |