close

定點數運算(Fixed Point)


Abstract :


定點數(Fixed-Point)運算是指利用整數運算模擬浮點數(Floating-point)運算,雖然會降低精確度,卻可以提升微處理器的運算速度。在現今一般的微處理器內並沒有配置浮點數的運算器,浮點數運算需要花費較多的時間,對於控制理論而言,程式執行的時間必須十分嚴謹。可以利用較短的時間完成較多的事情是定點數運算的優點之一。


 


Introduce :


首先以圓周率 的計算為例來做說明,方法大致上分為三種


ü          呼叫C的浮點數運算


ü          314/100,運算過程只有整數沒有浮點數


ü          201/64=201+右移六次


以上三種方法都可以得到相同的結果。方法1是一般寫C語言的軟體工程師會使用的方法,而非韌體工程師該有的作法,會因此失去核心的競爭力。方法2需要一個除法器來做運算,但也比方法一要快的多。方法3是以移位的方式做運算,在微處理器的運算裡效率最為優異。


 


而對於 的運算,該如何找出方法三201/64的這個數字卻是另一個課題。然而本文的尋找方式不外乎暴力破解法!繼續以 為例,取 到小數點後第八位,如下式:


X = 3.14159265


緊接著試圖找近似值,如下式:


        X = a / b


使用國小數學敎的交叉相乘後可以得到,如下式:


        a = bX


 


接著就是展開暴力破解法的序幕,將b以數字2的次方由小到大依序帶入做計算,將結果a與原值 做差值計算,即可求出誤差。誤差越小代表與 值越接近。畢竟是以整數模擬小數,並無法完全與原始數值相同,因此誤差的可接受範圍因人而異,需要視需求去挑選。如何挑選b次方項係數。以8位元微處理器為例,挑選原則只要運算後的結果變數a不要超過28次方也就是255即可。


 


接著本文以MATLABM-File檔撰寫簡單的程式,如下圖所示。將M-File程式段內的X參數以及Limit參數更改後即可觀察誤差結果。




暴力破解法簡易程式視窗圖


把參數b由小到大依序帶入做計算,並且把參數a超過255的都捨棄掉,再將結果依序排列秀出,如下圖所示。




暴力破解法之誤差示意圖


 

arrow
arrow
    全站熱搜

    jk3527101 發表在 痞客邦 留言(0) 人氣()