【发布时间】:2011-01-21 09:15:30
【问题描述】:
我做一些数值计算,在使用 GCC 时,我经常遇到浮点计算问题。对于我目前的目的,我不太关心结果的真实精度,但我想要这个坚定的财产:
无论 SAME 代码在我的程序中的 WHERE 位置,当它在 SAME 输入上运行时,我希望它提供 SAME 输出。
如何强制 GCC 执行此操作?具体来说,--fast-math 的行为是什么,以及不同的 -O 优化?
我听说 GCC 可能会很聪明,有时会在寄存器中加载浮点数,有时会直接从内存中读取它们,这可能会改变浮点数的精度,从而导致不同的输出。我怎样才能避免这种情况?
再次,我想要:
- 我的计算要快
- 我的计算要可靠(即相同的输入 -> 相同的结果)
- 我不太关心这个特定代码的精度,所以如果这能带来可靠性,我可以降低精度
谁能告诉我解决这个问题的方法是什么?
【问题讨论】:
标签: optimization gcc floating-point