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

Dol*_*000 14 c floating-point optimization gcc

GCC的手册页指出-funsafe-math-optimizations允许优化"(a)假设参数和结果有效,(b)可能违反IEEE或ANSI标准",但这不是很精确,是吗?

在这种情况下,什么可能是"无效"的论点?NaN的?Infinites?次归?负数到sqrt()

结果允许偏离IEEE或ANSI标准多远?它是"仅仅"像操作关联性和排序的东西,还是可能包括例如.与NaN的真实比较或与无限的不正确比较?可以存储变量进行重新四舍五入已被使用后(使得对变量 xy,(x == y) + (x == y)可以评估到1)?可以isinf()/ isnan()停止工作吗?

GCC开发人员是否遵循任何特定的系统或纪律来解决这些问题,或者答案在不同版本之间是否会有很大不同?

Dre*_*ann 3

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

此模式可实现允许任意重新关联转换的优化,但不保证准确性。它也不会尝试保留零的符号

这包括您提到的关联重新排序,以及“具有诸如 __builtin_sqrt 之类的名称的内置函数”,当它们“可能具有较低的精度或被限制在较小的域”时应用