-funsafe-math-optimizations 中包含哪些优化?

What kind of optimizations are included in -funsafe-math-optimizations?

GCC 的 man page 声明 -funsafe-math-optimizations 允许优化“(a) 假设参数和结果有效并且 (b) 可能违反 IEEE 或 ANSI 标准”,但这不是很精确,是吗?

在这种情况下,"invalid" 参数是什么? NaNs?无穷大?低于正常值?负数到 sqrt()?

允许结果偏离 IEEE 或 ANSI 标准多远?它是 "merely" 之类的东西 operation associativity and ordering,还是可能包括例如。与 NaN 的真实比较或与无穷大的不正确比较?存储的变量在使用后是否可以重新舍入(这样,对于 variables xy(x == y) + (x == y) 可以计算为 1) ? isinf()/isnan() 可以停止工作吗?

GCC 开发人员是否遵循关于此类问题的任何特定系统或纪律,或者答案是否会因版本而异?

根据gcc.gnu.org(我的粗体):

This mode enables optimizations that allow arbitrary reassociations and transformations with no accuracy guarantees. It also does not try to preserve the sign of zeros.

这包括您提到的 associative reordering,以及 "Built-in functions [which] have names such as __builtin_sqrt""may have less precision or be restricted to a smaller domain"