2011-09-15 91 views
2

可能重複:
Why is float division slow?計算機是否比x/2計算得快.5 * x?

聽說計算機做的工作。5×X的速度比X/2。這是真的?你能告訴我爲什麼或如何工作?

+0

不知道是否有任何編譯器/平臺可以做到這一點,但將float/double除以「2」就意味着從指數中減去/添加「1」。沒有想過通過角落案件是否複雜。 – Keith

+0

我也聽說過這個,我知道它與硬件處理數據的方式有關,但我不知道它給出了一個體面的解釋。然而,這個網頁似乎有一些很好的答案,可能對你有用。 http://stackoverflow.com/questions/506237/why-is-float-division-slow –

+0

作爲一個提示,考慮乘法手動過程與手動分割過程。一個由一系列直接計算組成,另一個涉及一系列計算和決策。 – phkahler

回答

1

這通常不是真的。這取決於微處理器的指令集。有時候沒有原生的'/'操作,所以編譯器會使用兩個:時鐘一個來得到.5,一個乘法,而它的堂兄.5 * x只會使用一個。

但是對'/'沒有限制,可能有一個微處理器確實有一個本地'/',所以它會依賴於它。

+0

即使處理器上有本機「/」,它仍然會變慢 – arsenm

+0

是的,你是對的。將會發生的事情是它將在更長的時鐘內處理。 – fceruti

1

簡答:是的,乘法通常更快。

對於特殊情況,它可能取決於很多事情,例如,平臺,語言,編譯器,硬件,是否存在查找表等。對於2的整數除法,位移有時會再快一點。但編譯器通常可以優化這些情況。

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

當編寫C++代碼,當我從一個循環內恆定k做師,我常常能擠走在性能關鍵代碼部分漲幅通過定義double ki = 1./k外循環使用在循環內乘以ki

+1

如果'x'是一個浮點數,位移不會做很棒的事情。 –