gpt4 book ai didi

c++ - 在不同的平台/编译器上实现相同的浮点计算结果?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:39:17 24 4
gpt4 key购买 nike

不同的平台具有不同参数和行为的不同 FP 功能,因此它们产生的计算结果之间存在一定程度的差异,这些差异在每个中间步骤上级联和放大。

我所处的情况是(+-*/ only)计算在每个不同的目标平台上使用不同的编译器供应商产生相同的结果是至关重要的,所以我想知道是否有是做到这一点的标准方法。我问的不是任意高精度 float ,而是标准的 64 位 IEEE double,性能下降是可以接受的。

最佳答案

即使您有 64 位 IEEE754 double,也有一些额外的事情需要检查。

  1. 确保您有严格 float 。不允许您的编译器使用 80 位进行中间计算。

  2. IEEE754 要求各种运算(所有算术运算,例如您提到的那些,std::sqrt 等)以尽可能返回最佳数字。 (如果您需要其他人,请确保您的所有操作都在 IEEE754 标准中提及,并且您的平台忠实地遵守该标准 - 它可能不会)。

  3. 避免使用其他函数(例如三角函数),即使在 IEEE754 下也无法保证精度。

在您的具体情况下,似乎 (1) 就足够了,也许还有(对于 C++)

static_assert(std::numeric_limits<double>::is_iec559, "IEEE 754 floating point required");

关于c++ - 在不同的平台/编译器上实现相同的浮点计算结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55046029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com