Re: [心得]使用Shift移位加快浮點運算
※ 引述《tomex (tomex_ou)》之銘言:
: 電腦處理四則運算時,唯獨在除法及浮點運算會比較費力
: 針對除法,我們可以倒置為乘法,
: 但對於浮點運算,怎麼辦呢?
: 答案就是把它替代為一個整數再右移位。
: 例如,一個浮點數 a = 0.1234
: 如何換算成shift運算(以變數b來代替)呢?
: 1.a先乘上2^20次方值。
: f = 0.1234 * 1024 * 1024 = 129394.28
: 2.由於shift只能針對整數作運算,四捨五入f值:
: i = 129394.28 = 129394
: 3. i值右移20位,129394 >> 20 即等於 0.1234
: 所以 a = 0.1234 = 129394 >> 20 = b
我覺得還是得看你的應用
如果整數來講 129394>>20 是 0
所以運算 a*0.1234 得變成 (a*129394)>>20 不能寫成 a*(129394>>20)
但這樣除了喪失精確度(放棄小數部份) (a*129394) 可能會溢位
a如果是浮點數 a*129394 不容易溢位 但是要shift之前還得轉成整數 也還是可能會溢位
所以這方法 其實不是很適當 還是要看你的應用而定
另外 得看你的cpu來定 a*0.1234是一個浮點乘法 (a*129394)>>20 是兩個運算
在目前一般的risc機器上 不一定會比較快
我覺得既然需要浮點 這種方法還是不太好 除非真的是很隨意大概大概的應用
像是fuzzy方式處理 XD
: 我用100萬筆模擬運算求運作計算時間,
: 以P4-1.6 Centrino CPU為例,發現使用b值會比用a值時間節省1倍
: 而且b值的cpu使用率也大概為a值為2/3而己。
: 假設你從事數學公式程式寫作,shift的技巧不可不知呀!
數學公式應該都是很要求精確的吧 這種方法還是少用微妙
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.217.14
推
04/21 01:33, , 1F
04/21 01:33, 1F
推
04/21 01:49, , 2F
04/21 01:49, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章