std::numeric_limits<double>::quiet_NaN() 跨平台安全吗?

Is std::numeric_limits<double>::quiet_NaN() cross platform safe?

本文关键字:跨平台 NaN 安全 double limits numeric lt std gt quiet      更新时间:2023-10-16

在我为 armhf 板创建的 c++ 应用程序中,我获取 GPS 经度和纬度十进制值并将其存储到双精度变量中。目前,我将这些变量初始化为无效值(255)。
但是我遇到了通过使用std::numeric_limits可以将双变量分配给std::numeric_limits<double>::quiet_NaN().
关于 nan 跨平台问题,我阅读了非常有用的链接 我应该对包含无效值的数据集使用浮点数的 NaN 还是浮点 + bool?
另一方面std::numeric_limits是一个纯粹的 c++11 标准,但我想知道有人在不同平台中移植这种代码时是否遇到任何问题。
例如,如果我将代码从硬浮动移动到软浮动 甚至是 amd64 平台,上述初始化是否会导致应该用操作系统预处理器指令处理的任何问题?

来自 cpp首选项:"std::numeric_limits::has_quiet_NaN 的值对于能够表示特殊值 "Quiet Not-A-Number" 的所有类型 T 都是正确的。此常量对所有浮点类型都有意义,如果 std::numeric_limits::is_iec559 == true,则保证为真。

您需要检查软浮点库或 FPU 是否符合 IEEE 754 (IEC 559),并且还需要使用正确的编译器标志来启用它们的使用,请参阅:用于浮点的 gcc 标志。