如何找到可以通过“-ffast-math”优化的数学运算?

Aar*_*nke 5 c++ math static-analysis compiler-optimization fast-math

C++ 编译器选项-ffast-math允许编译器执行更多数学优化,这可能会稍微改变行为。例如,x * 10 / 10应该取消,但由于溢出的可能性,它会稍微改变行为,并且x / 10.0 / 10.0可能具有与 不同的舍入误差x / 100.0

然而,正如许多资源所指出的那样,包括 StackOverflow 上的许多问题,-ffast-mathC++ 编译器选项可能会导致跨平台的奇怪行为。相反,推荐的方法是在您希望编译器优化的操作周围手动添加括号。

有没有办法识别代码库的这些部分?某种静态分析工具可以找到-ffast-math启用后会有所不同的所有代码行,以便程序员即使在未启用的情况下也可以手动调整要优化的代码行-ffast-math