Re: [問題] 乘除法的速度

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間18年前 (2006/04/09 15:11), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
※ 引述《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
用 LEA .. 妙計!
04/09 17:27, 1F
文章代碼(AID): #14EBEVn3 (C_and_CPP)
文章代碼(AID): #14EBEVn3 (C_and_CPP)