你好,

我开发了一些混合的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讨论的舍入模式不同。

10-06 02:53