我可以在文档和网络中找到的有关 -ffinite-math-only 的所有信息是“允许对假设参数和结果不是 NaN 或 +-Infs 的浮点算术进行优化。”这对我来说似乎不太现实。有谁确切知道什么这些优化是什么?
在这个假设下可以优化很多小事情,例如:
x == x
--> 1
x * 1
--> x
x >= y
--> !(x < y)
类似。x/x
--> 1
如果编译器可以证明 x != 0
。x > y ? x : y
这样的表达式使用硬件最大/最小指令。您经常看到这个假设与“零的符号无关紧要”之类的假设一起出现,这样就可以实现以下内容:
x - x
--> 0
0 / x
--> 0
x * 0
--> 0