【问题标题】:How to fix floating point precision for QNX?如何修复 QNX 的浮点精度?
【发布时间】:2016-02-29 09:13:19
【问题描述】:
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 与 Linux 的“str”不同。 我希望这个值与 Linux 的值相同。我不知道如何为 QNX 平台解决它。

【问题讨论】:

  • skPrecision 本身不能用浮点数表示。

标签: c++ linux precision qnx


【解决方案1】:

从这里开始:Enabling strict floating point mode in GCCGCC Wiki - Floating Point Math

其他需要考虑的事项:

  • 您是否为两者使用相同的处理器?
  • 都在 32 位模式下运行(AFAIK 截至 2016 年 2 月,QNX 没有 64 位版本)?
  • 如果运行 x86,编译器是将中间值从 FPU 加载回寄存器(即将 80 位数学运算截断为 64 位)还是所有值都保存在 FPU(80 位)中? (见:This answer about the -ffloat-store flag.

【讨论】:

    猜你喜欢
    • 2016-06-18
    • 2021-09-16
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多