【问题标题】:Do computers calculate .5*x faster than they do x/2? [duplicate]计算机计算 0.5*x 的速度是否比 x/2 快? [复制]
【发布时间】:2011-09-15 11:39:51
【问题描述】:

可能重复:
Why is float division slow?

我听说计算机的运算速度比 x/2 快 0.5*x。这是真的?你能告诉我这是为什么或如何工作的吗?

【问题讨论】:

  • 我也听说过这个,我知道这与硬件处理数据的方式有关,但我对此了解的不够多,无法给出一个体面的解释。但是,此页面似乎有一些可能对您有用的好答案。 stackoverflow.com/questions/506237/why-is-float-division-slow
  • 不知道是否有任何编译器/平台可以做到这一点,但是将浮点数/双精度数除以2 只是意味着从指数中减去/加上1。没有考虑过极端情况是否会使这复杂化。
  • 作为提示,请考虑乘法的手动过程与除法的手动过程。一个由一系列直接计算组成,而另一个则涉及一系列计算和决策。

标签: math


【解决方案1】:

一般来说这不是真的。这将取决于微处理器的指令集。有时没有原生的 '/' 操作,所以编译器会使用两个:一个用于获取 .5 和一个用于乘法,而它的表亲 .5*x 将只使用一个。

但是对'/'没有限制,可能有一个微处理器确实有一个本机'/',所以这取决于。

【讨论】:

  • 即使处理器上有原生的'/',它仍然会更慢
  • 是的,你是对的。将会发生的事情是它将在更长的时钟中处理。
【解决方案2】:

简短回答:是的,乘法通常更快。

对于特定情况,它可能取决于很多事情,例如平台、语言、编译器、硬件、查找表的存在与否等。对于整数除以 2 的幂,移位有时又会快一点。但是编译器通常可以优化这些情况。

wim@wim-acer:~/Desktop$ python -mtimeit '0.5*1234567890.'
100000000 loops, best of 3: 0.0168 usec per loop
wim@wim-acer:~/Desktop$ python -mtimeit '1234567890./2.'
10000000 loops, best of 3: 0.043 usec per loop
wim@wim-acer:~/Desktop$ python -mtimeit '1234567890 >> 1'
100000000 loops, best of 3: 0.0168 usec per loop

在编写 C++ 代码时,当我必须在循环内除以常量 k 时,我通常能够通过在循环外定义 double ki = 1./k 并使用在循环内乘以ki

【讨论】:

  • 如果x 是一个浮点数,那么位移就不会起到很好的作用。
猜你喜欢
  • 1970-01-01
  • 2018-09-17
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2013-12-03
  • 2013-04-26
相关资源
最近更新 更多