什么是-ffinite-math-only促进的优化?

use*_*148 5 compiler-construction floating-point optimization gcc

我可以在文档和web中找到-ffinite-math-only的所有信息是"允许优化浮点运算,假设参数和结果不是NaN或+ -Infs".这对我来说似乎没有.有谁知道这些优化究竟是什么?谢谢

Ste*_*non 8

在这个假设下可以优化很多小东西,例如:

  • x == x - > 1
  • x * 1 - > x
  • x >= y- > !(x < y)和类似的.
  • x/x- > 1如果编译器可以证明x != 0.
  • 它可能允许编译器对表达式使用硬件max/min指令x > y ? x : y.
  • ......还有更多

你经常会看到这个假设以及"零符号无关紧要"之类的假设,然后允许这样的事情:

  • x - x - > 0
  • 0 / x - > 0
  • x * 0 - > 0