[英]__builtin_unreachable with floats in GCC
来自GCC 文档:
-fno-signed-zeros
允许对忽略零符号的浮点算术进行优化。 IEEE 算术指定不同的 +0.0 和 -0.0 值的行为,然后禁止简化表达式,例如 x+0.0 或 0.0*x(即使使用 -ffinite-math-only)。 此选项意味着零结果的符号不重要。默认值为 -fsigned-zeros。
-Ofast
包括这个优化选项,而-O3
没有。
如果没有这个选项,function 需要返回加法结果的有符号零的确切值,因此编译器只需执行加法。
如果0
更改为其他值,例如1
或1.2f
或1.5
,则编译器将在没有-ffast-math
的情况下进行优化。
备注:如果将值更改为1.2
(因此比较与标准要求的static_cast<double>(sum).=1.2
相同),则编译器将保留加法,尽管__builtin_unreachable()
将始终为执行是因为在转换为双精度时没有完全等于1.2
的float
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.