江湖一點訣-8051圓周率計算技巧的真相 |
|
happosai
高階會員 發表:93 回覆:228 積分:109 註冊:2002-09-15 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
小弟以前在寫 MCU 時有一些類似的用法. 給大家參考參考. 當時 chip 除法指令須 18 個指令週期, 其他指令則大多 1~2 個指令週期. 為了縮短回應時間, 於是將所有"常數"除法命令改寫為 1 乘法指令 + 1 位移指令. 如此便省了 16 個指令週期.
Ex : /10 => *13 右移 7 bit 未位移前還可利用其餘 7 bit 決定是否要作四捨五入的動作. FYI.
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
sharkneil
一般會員 發表:27 回覆:33 積分:12 註冊:2005-01-21 發送簡訊給我 |
===================引 用 ㊣ 文 章=================== 小弟以前在寫 MCU 時有一些類似的用法. 給大家參考參考. 當時 chip 除法指令須 18 個指令週期, 其他指令則大多 1~2 個指令週期. 為了縮短回應時間, 於是將所有"常數"除法命令改寫為 1 乘法指令 1 位移指令. 如此便省了 16 個指令週期. Ex : /10? => *13 右移 7 bit? ?????? 未位移前還可利用其餘 7 bit 決定是否要作四捨五入的動作. FYI. 那這方法是如何演算出來的阿? |
happosai
高階會員 發表:93 回覆:228 積分:109 註冊:2002-09-15 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
happosai 兄說的沒錯. 這還只是 8 bit 運算, 若為 16bit 或 32 bit 運算可以找到更近似的算法.
而 8 bit 只有 255, 單純/10 根本不會有誤差. 語法大家都會, 怎麼應用就是學問了. 江湖一點訣阿! ===================引 用 happosai 文 章=================== 一樣是用近似法,X / 10 = X * 0.1 0.1 近似於 13/128,你把我網站上的程式編成 .exe 自己跑跑看就知道了, 誤差為 0.156250%(對於整數除法很夠了)。 不過其實這在數學上可以找得到證明(聽別人講的)
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |