【发布时间】:2020-01-14 08:55:55
【问题描述】:
我试图在 2 个不同的平台上获得完全相同的结果,即 Solaris 和 Linux(sun-studio vs GCC)。整个代码使用双数据类型。但是当我打印输出时,我会看到浮点数的差异(比如小数点后 20 位)。
我需要知道的是我是否可以设置一些编译器标志以使 GCC 和 sun-studio 编译器的行为相同。附图显示了 Double 数据类型的差异。左侧是 GCC 的输出,另一个是 sun-studio。
【问题讨论】:
-
没有这样的标志,除了学会忍受它,你无能为力。
-
如果您对此感到担忧,您可能遇到了设计问题。
-
您不能强制两个编译器生成相同的代码,因为它们是不同的产品。但是,您可以改用
long double来提高准确性。 -
另外,这不仅受编译器影响,还受操作系统和硬件影响。
-
也许你得到相同的结果,但打印方法不同。您打印的数字比 double 数据类型通常具有的有效数字多,因此打印例程可能会与打印额外数字的方式不同。如果两个平台都使用 IEEE754,而您只使用基本操作(+、-、*、/、sqrt),那么您应该得到相同的结果。如果你使用其他操作,有一些开源库可以用基本操作计算其他操作,这样你就可以让你的程序跨平台保持一致。