哪个版本更快?x * 0.5
or
x / 2
前段时间我在大学里有一门叫做计算机系统的类(class)。从那时起,我记得可以使用相对“简单”的逻辑门来实现两个值的乘法,但除法不是“ native ”操作,并且需要一个求和寄存器,该求和寄存器在循环中由除数增加并与被除数进行比较。
现在我必须优化一个有很多划分的算法。不幸的是,它不仅仅是除以二,所以二进制移位是没有选择的。将所有除法改为乘法会有所不同吗?
更新:
我已经更改了我的代码,并没有注意到任何区别。您可能对编译器优化是正确的。由于所有的答案都很棒,我对它们都投了赞成票。由于链接很好,我选择了 rahul 的答案。
最佳答案
通常除法比乘法要昂贵得多,但一个聪明的编译器通常会通过编译时常量将除法转换为乘法。如果您的编译器不够智能,或者存在浮点精度问题,那么您始终可以明确地进行优化,例如改变:
float x = y / 2.5f;
到:
const float k = 1.0f / 2.5f;
...
float x = y * k;
请注意,这很可能是 premature optimisation 的情况。 - 如果您已经对代码进行了概要分析并且肯定地将除法确定为性能瓶颈,那么您应该只做这种事情。
关于performance - 什么有更好的性能 : multiplication or division?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977050/