每次执行时都会计算两个常量的乘积吗?
例如,如果我有:
if(x < 2*0.025) { ... }
每次都会计算 2*0.025
吗?或者是否替换为 0.05
以便不必每次都运行乘法运算?
换句话说,使用0.05
而不是2*0.025
效率更高吗?
For example, if I have:
if(x < 2*0.025) { ... }
Does the 2*0.025
get computed every time? Or does a 0.05
get substituted in so that the multiplication operation doesn't have to run every time?
In other words, is it more efficient to use 0.05
instead of 2*0.025
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我知道的每个编译器都实现常量折叠,即在编译时计算常量表达式时间,所以没有区别。然而,该标准并未强制要求:
您可以使用某些编译器显式禁用此优化。例如,
-frounding-math
禁用 gcc 中浮点表达式的常量折叠。Every compiler I know implements constant folding, i.e. calculates constant expressions at compile time, so there is no difference. The standard, however, does not mandate it:
You can explicitly disable this optimization with some compilers. For example,
-frounding-math
disables constant folding for floating point expressions in gcc.常量表达式是预先计算的。
Constant expressions are precomputed.