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

时间:2018-02-10 01:22:24

标签: c++ double cross-platform nan

在我为armhf板创建的c ++应用程序中,我获得了gps经度和纬度十进制值,并将其存储到双变量中。暂时我将这些变量初始化为无效值(255) 但是我发现使用std::numeric_limits可以将一个双变量分配给std::numeric_limits<double>::quiet_NaN() 关于nan跨平台问题,我阅读了非常有用的链接Should I use floating point's NaN, or floating point + bool for a data set that contains invalid values?
另一方面,std::numeric_limits是纯c ++ 11标准,但我想知道在不同平台上移植这种代码时是否有人遇到任何问题。
例如,如果我将代码从硬转移到软浮动 甚至amd64平台上面的初始化会导致应该用OS预处理器指令处理的任何问题吗?

1 个答案:

答案 0 :(得分:0)

From cppreference:“对于所有能够表示特殊值”Quiet Not-A-Number“的类型,std :: numeric_limits :: has_quiet_NaN的值为true。此常量对所有浮点都有意义如果std :: numeric_limits :: is_iec559 == true,则保证为true。“

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

相关问题