小编典典

gcc 的 ffast-math 实际上是做什么的?

all

我知道 gcc 的--ffast-math标志可以大大提高浮动操作的速度,并且超出了 IEEE
标准,但我似乎无法找到有关它开启时实际发生的情况的信息。任何人都可以解释一些细节,并给出一个明确的例子,说明如果标志打开或关闭,事情会如何变化?

我确实尝试通过 SO 挖掘类似的问题,但找不到任何解释 ffast-math 工作原理的东西。


阅读 80

收藏
2022-07-13

共1个答案

小编典典

正如您所提到的,它允许不保持严格的 IEEE 合规性的优化。

一个例子是这样的:

x = x*x*x*x*x*x*x*x;

x *= x;
x *= x;
x *= x;

由于浮点运算不是关联的,因此运算的排序和因式分解会因舍入而影响结果。因此,这种优化不是在严格的 FP 行为下进行的。

我实际上并没有检查 GCC 是否真的做了这个特定的优化。但想法是一样的。

2022-07-13