你好,
我开发了一些混合的C/C++代码,并进行了一些密集的数值计算。在Linux和Mac OS X上编译时,在模拟结束后,我会得到非常相似的结果。在Windows中,该程序也可以编译,但结果却截然不同,有时该程序似乎无法正常工作。
我在所有系统中都使用了GNU编译器。一些 friend 建议我添加-frounding-math,现在Windows版本似乎更稳定,但是Linux和Os X的结果完全不变。
您是否可以推荐其他选项,以使Win和Linux/OSX版本之间更加协调?
谢谢
P.D.我还尝试了-O0(无优化)并指定了-m32
最佳答案
我不能说Windows中的实现,但是Intel芯片包含80位浮点寄存器,并且可以提供比IEEE-754浮点标准中指定的精度更高的精度。您可以尝试在应用程序的main()中调用此例程(在Intel芯片平台上):
inline void fpu_round_to_IEEE_double()
{
unsigned short cw = 0;
_FPU_GETCW(cw); // Get the FPU control word
cw &= ~_FPU_EXTENDED; // mask out '80-bit' register precision
cw |= _FPU_DOUBLE; // Mask in '64-bit' register precision
_FPU_SETCW(cw); // Set the FPU control word
}
我认为这与@Alok讨论的舍入模式不同。