我有一个代码,我想从Windows 32位移植到Linux 64位。这段代码使用双类型数字的基本浮点运算进行了大量计算,我尝试在两种环境中保持相同的结果。
在Windows上,我使用VisualC ++使用/ fp:strict选项编译代码。 我的第一步是将代码移植到Linux 32位(实际上在X86-64 Linux环境中以32位编译代码)。 这个问题已经在这里得到广泛解决(例如in this question)。建议我使用gcc和选项 -msse2 -mfpmath = sse 编译代码,结果在Windows 32位和Linux 32位之间完全相同。
我最终用64位编译代码,期望保存相同的结果......但是存在很多差异。这个问题也已经讨论过(参见here和there),但由于gcc选项已经使用了SSE浮点单元,我通常应该在Linux 32和64位之间观察到相同的结果。
所以我现在有点卡住了。我能想到的唯一剩下的解释是问题在于代码(比较两个双重用于平等的东西 - 希望没有,但不能绝对肯定)。你怎么看 ?我在某个地方错过了一点吗?我错过了另一种解释吗?
非常感谢任何建议。
注意1:我也尝试了选项 -ffloat-store ,但它没有帮助我让结果彼此接近。