在microchip的討論區找資料時,發現一個有趣的問題
原討論文章出處笨鴨上班啦裡面在討論如何取得較精的20%
那我也來做個比較好了
設y=200;
t=y*0.2;
使用浮點數運算,可以得到0x0028;運算時間392個指令時間。
使用hellowanz大大的方式:y=t>>3+t>>4+t>>7+t>>8 ,移位數值不捨去。
可以得到0x0027,運算時間15個指令時間。
使用master大大的方法:y=t>>3+t>>4。
可以得到0x0025,運算時間6個指令時間。
使用之前的移位除法:y=t*819>>12。
可以得到0x0027,運算時間16個指令時間。
結論:使用hellowanz大大的方式,單純只用移位器和加法器,一樣可以做到精準度小數1位。
不過,用移位除法的精準度可以準到小數3位。
呵呵,很有趣的題目。給大家參考一下。
其實這個現象可以看出你所用的MCU是具有乘法器,所以指令時間才會少。若是沒有乘法器,使用數值模擬一樣是用移位加法代替乘法。
回覆刪除所以使用時機,應是看使用的MCU是否有乘法器。若有,使用乘法及移位除法會比較好。
若是沒有乘法器,使用移位加法,因為可以省下精算的時間。
[版主回覆12/08/2008 15:17:43]因為我接觸的MCU比較少,因為Microchip很支持,且大概都有免費的Sample可以使用,所以就很習慣的用dsPIC了。
可否請教一下 y=t*819>>12裡面的數字819跟12是如何找出來的 e041128@ms28.url.com.tw
回覆刪除[版主回覆02/22/2010 15:34:01]http://tw.myblog.yahoo.com/sn903209ss/article?mid=461&prev=478&next=456&l=a&fid=5
照著聯結進去,你就可以看到結果了。
我今天才看到,原來我的東西也有人仔細研究,這表示論談的資料很有用,真的有幫助到人,我就很開心了
回覆刪除Hellowanz
[版主回覆05/22/2011 09:10:14]也感謝你們這樣熱心的人,才讓我有學習的空間
題外話,Hellowanz 大大和ASUS有關係嗎?因為我找你的資訊會和ASUS有聯結
你怎麼去搜尋這個...?我跟ASUS沒什麼關係,我只是買了EPC,註冊了一個帳號,在ASUS網頁上回答問題而已,不過很久沒上去看了
回覆刪除