static const double sKPrecision = 1.e+16;
std::sprintf(str, "%1.15e", round(val * sKPrecision) / sKPrecision);
观察:
val str for Linux str for QNX
-0.174533 -1.745329251994333e-01 -1.745329251994333e-01
1.06202 1.062015382745040e+00 1.062015382745040e+00
1.63244 1.632439935370810e+00 1.632439935370811e+00
根据上表,对于 1.63244,QNX 的“str”与 Linux 不同。 我希望这个值与Linux的相同。我不知道如何解决 QNX 平台的问题。
最佳答案
从这里开始:Enabling strict floating point mode in GCC和 GCC Wiki - Floating Point Math
其他需要考虑的事情:
- 两者使用相同的处理器吗?
- 两者都以 32 位模式运行(据我所知,截至 2016 年 2 月,QNX 没有 64 位版本)?
- 如果运行 x86,编译是否将中间值从 FPU 加载回寄存器(即将 80 位数学截断为 64 位),或者所有值都保留在 FPU 中(80 位)? (参见:This answer about the -ffloat-store flag.)
关于c++ - 如何修复QNX的浮点精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35695651/