C++ 浮点数差异

Pra*_*mar 3 c++ gcc

我试图在 2 个不同的平台上获得完全相同的结果,即 Solaris 和 Linux(sun-studio vs GCC)。整个代码使用双数据类型。但是当我打印输出时,我看到浮点数的差异(如小数点后 20 位)。

我需要知道的是我是否可以设置一些编译器标志来使 GCC 和 sun-studio 编译器的行为相同。附加图像显示了 Double 数据类型的差异。左侧是 GCC 的输出,另一侧是 sun-studio。

在此处输入图片说明

lui*_*nho 9

主要问题来自于此:

我试图在 2 个不同的平台上获得完全相同的结果

您不能保证在两个不同的平台上获得相同的结果。他们在实施浮动操作的方式上可能有很多不同。

您的问题的一种解决方案:定点算术。

另外,看看这些答案:

跨平台浮点一致性

IEEE 浮点数和双精度数是否保证在任何操作系统上都具有相同的大小?

它们是您了解正在发生的事情的一个很好的开始。

  • 此外,如果您更改(名义上可交换的)操作的顺序等,您甚至不能保证在相同的平台上获得相同的结果。 (3认同)