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

问题描述 投票:2回答:1

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

我处于这样一种情况,即(仅限+-*/)计算在每个不同的目标平台上使用不同的编译器供应商生成相同的结果是至关重要的,所以我想知道是否有标准的方法来做到这一点。我不是要求任意高精度浮点数,而是标准的64位IEEE double,并且预计会遇到性能损失。

c++ c double ieee-754 fpu
1个回答
0
投票

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

  1. 确保你有严格的浮点数。不允许编译器使用例如80位进行中间计算。
  2. IEEE754要求各种操作(所有算术操作,例如你提到的算术操作,std::sqrt和c。)以返回尽可能最好的数字。 (如果您需要其他人,请确保IEEE754标准中提及您的所有操作,并且您的平台忠实地遵守 - 可能不遵守)。
  3. 回避其他功能(例如三角函数),即使在IEEE754下也无法保证精度。

在您的特定情况下,似乎(1)就足够了(对于C ++)

static_assert(std::numeric_limits<double>::is_iec559, "IEEE 754 floating point required");
© www.soinside.com 2019 - 2024. All rights reserved.