Re: [問題] 乘除法的速度
※ 引述《lytesha ( <囧>)》之銘言:
: 請問一下 由於在C中乘除法的速度會比較慢
: 如果 ex. i= j*7 ;
: 改成 i= (j<<3)-j;
: 這樣還會比要快嗎?
不一定
要看 compiler 做得怎樣
: 另外請問一下要如何盡量不用乘除法阿
: 我知道如果是2的次方 可用<< or >>來作
: 如果不是呢? 要怎麼辦?
: 謝謝
x86 assembly 有一個叫 lea 的指令
原本的用途是幫你計算 indirect addressing 下的記憶體位址
(base + index * scale)
但因為其中有 index * scale 的部分
所以可以拿來計算常數乘法
不過我不會建議你用 assembly 做這種事
因為這是 compiler 的工作
事實上以你前面的例子
我用 gcc 試過的結果是寫 i=j*7 會比 i=(j<<3)-j 要快
2的次方我也不建議你用 << 取代星星
一來是 compiler 會幫你做 (如果你用的compiler做不到......扔掉它吧)
二來是用星星別人比較容易看懂 (code 是寫給人看的)
至於除法比較難
你可以去看 IA32 optimization reference 之類的文件
裡面有一脫拉庫的方法
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.62.3.35
推
04/09 17:27, , 1F
04/09 17:27, 1F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章