c++ - 如何修复QNX的浮点精度?

标签 c++ linux precision qnx

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 GCCGCC 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/

相关文章:

C++/CX - DataReader 越界异常

c++ - 使用不同的 enable_if 条件选择成员函数

C++ 引用和内存

c - 如何在内核源代码中设置断点以获取 fork.c 中函数的地址?

linux - 在 bash 脚本中设置日期

MATLAB 强制 num2str 格式化

floating-point - 16 位、32 位和 64 位 IEEE-754 系统可以表示什么范围的数字?

java - 在 BigDecimal.divide 期间引发 ArithmeticException

c++ - 数组衰减到指针和重载解析

linux - make 命令和运行 build .sh 脚本之间的主要区别是什么?