C++ 分配期间 NaN 字节表示形式发生变化
C++ NaN byte representation changes during assignment
尝试将 NaN 分配给 x64 处理器上的变量
*dest = *(float*)&sourceNaN;
哪里
unsigned char sourceNaN[] = {00,00, 0xa0, 0x7f};
浮点指令 fld 和 fstp(见于反汇编)将0xa0字节更改为0xe0。 因此,目标设置了一个额外的位。 有人可以解释为什么会发生这种情况吗? 这是一个Windows应用程序。
汇编语言代码:
005C9B9C mov eax,dword ptr [ebp+10h]
005C9B9F fld dword ptr [ebp-80h]
005C9BA2 fstp dword ptr [eax]
0x7fa00000
是一个信令NaN("sNaN")。 0x7fe00000
是一个安静的NaN("qNaN")。我还没有听说过 x86 下的这种行为,但在 ARM 下,sNaN 在操作中使用时会转换为相应的 qNaN,同时引发 FP 异常(通常被忽略)。看起来这里也发生了同样的事情。
好消息是,他们都是NaN。除非你特别依赖信令行为,否则一切都会顺利进行。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何将ampl中的集合表示为c++中的向量
- std::is_base_of表示ctor编译错误
- C++取消引用指针.为什么会发生变化
- 为什么在读取文件大小时文件IO速度会发生变化
- 输入中的字符串数未知(以字母表示)
- 我可以信任表示整数的浮点或双精度来保持精度吗
- c++模板来表示多项式
- 询问在设计我的手臂模拟器功能表示格式1
- 为什么cudaMemGetInfo报告设备内存总量的变化
- CMakeLists.txt中的命名空间表示法
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 如何计算Big-O表示法中的平均渐近运行时间
- 我应该如何表示我拥有的连续元素序列?
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何避免LED在循环状态变化中闪烁?
- 表示类模板C++空类型
- 具有所表示类的相同构造函数签名的代理类模板
- C++ 分配期间 NaN 字节表示形式发生变化