performance - 什么有更好的性能 : multiplication or division?

标签 performance cpu low-level

哪个版本更快?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/

相关文章:

mysql - 如何提高 `INSERT INTO SELECT x FROM y GROUP BY z` MySQL 查询的性能

performance - 保存 Matlab 矩阵的最快方法

performance - 每个事务的连接/断开连接的 Oracle 性能

java - 从 Java 内部 throttle CPU

performance - SVG 图像和 CPU 使用率

caching - 处理器的指令在哪里?在 CPU 缓存中还是?

c - 如何在一次内存操作中加载可能的最大整数?

java - Google App Engine 上的 CPU 带宽是太贵了还是我的代码?

assembly - 使用 MASM 汇编器将华氏度转换为摄氏度

c - 使用低级 C i/o 将从标准输入接受的整行写入文件