如何在Windows和Linux上确保相同的浮点行为?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Windows和Linux上确保相同的浮点行为?相关的知识,希望对你有一定的参考价值。

我有一个软件可以对双打进行大量计算,它必须在linux和windows上运行。我不关心使用什么行为(更快更好),但我必须在两个平台上获得相同的结果。

我在Windows 10上使用x86_64-w64-mingw32 gcc版本4.9.2进行编译。在xubuntu上使用x86_64-linux-gnu gcc 4.9.3。

我已经尝试使用以下编译选项:-frounding-math -fno-rounding-math -ffloat-store在两个系统上似乎都没有用。

我对浮点表示的复杂性了解一点,但对于必须跨平台的软件强制执行相同的行为真的很难吗?

答案

要有相同的行为,至少你必须:

1-标准化你的类型,不要从double切换到long double只使用唯一类型long double例如2-如果你有任何constante,使用与你的类型相关的浮点文字:

如果选择long double,则constante必须具有后缀l或L ex:0.5L

以上是关于如何在Windows和Linux上确保相同的浮点行为?的主要内容,如果未能解决你的问题,请参考以下文章

如何确保跨平台的浮点大小相同?

有没有办法确保浮点的输出在不同的操作系统中相同?

如何保持浮点/双精度算术确定性?

在 Linux for x86 上检测异常浮点操作

如何在 windows 和 linux 上使用相同的宽字符字符串格式

windows下jar无法在linux下运行