在GCC中启用严格浮点模式

时间:2011-09-03 21:01:58

标签: c gcc

我还没有创建一个程序来查看GCC是否需要它通过,当我这样做时,我想知道如何启用严格的浮点模式,这将允许运行和计算机之间的可重现结果,感谢。

3 个答案:

答案 0 :(得分:5)

在支持它的Intel / AMD处理器上使用-msse2进行编译将使您几乎到达那里。不要让任何库将FPU置于FTZ / DNZ模式,并且您将大部分设置(尽管处理器存在错误)。

对于其他架构,答案会有所不同。那些没有提供任何方便的方法来获得精确的IEEE 754语义(例如,预先SSE2 IA32 CPU)的架构将需要使用浮点仿真库来获得您想要的结果,而且性能会受到很高的影响。

如果您的目标体系结构支持fmadd(没有中间舍入的乘法和加法)指令,请确保在源代码中有明确的乘法和加法时,编译器不会使用它。除非你使用-ffast-math选项,否则GCC不应该这样做。

答案 1 :(得分:2)

您还可以在i386 / ia32目标上使用GCC选项-mpc64来强制进行双精度计算,即使在x87 FPU上也是如此。请参阅GCC manual

您还可以在运行时修改x87 FPU行为,请参阅Deterministic cross-platform floating point arithmeticsAn Introduction to GCC

答案 2 :(得分:1)

如果使用-ffloat-store并始终将中间值存储到变量或将(显式)强制转换应用于所需的类型/精度,则应至少达到目标的90%,甚至更多。我欢迎评论是否有这种方法仍然遗漏的情况。请注意,即使没有任何SSE选项,我声称这也有效。