什么是定點數
顧名思義,在運算中小數點始終不會發生移動的數就是定點數。對于定點數,我們定義了其一共占有的bit位數以及小數點的位置,不同格式的定點數可以表達的數據范圍和數據精度也會隨之不同。
通常采用
?
圖:有符號定點數表示方法
比如一個字長為8,整數字長為4的無符號定點數,其表示方法為<+,8,4>,表示范圍從0—15.9375,增量值為0.0625。
?
圖:LabVIEW對于定點函數的即時幫助
為什么選擇定點數?
【效率高,占用資源較少】
一般說來,定點數的運算在計算機中實現起來比較簡單,效率較高;而浮點數的運算在計算機中實現起來比較復雜,效率相對較低。
?
圖:定點數以及單精度浮點數加乘運算占用資源
【執行時間短】
定點數的運算可以在FPGA一個單周期定時循環(SCTL)中完成,但是如若想在單周期定時循環中執行浮點運算則會編譯失敗
定點數的max、min和delta的計算
定點數的max和min是由符號位,字長和整數字長共同決定的,而delta的大小卻與符號位無關。
我們定義一個定點數表示為<+,m,n>,當m個全部字長都為1的時候,該值有最大取值;當m個全部字長都為0的時候,該值為最小值。
?
圖:無符號定點數delta值表示
一個無符號定點數的最大值為 ,最小值為0,其增量值Delta為相似的,對于有符號的定點數來說,符號位為0,其余所有位為1時取最大值;符號位為1,其余所有位為0時,此時取最小值;其增量值Delta依然為。
定點數的運算
【加法】
定點數在進行相加的時候,對于<+, m, n> 與<+, m, n>進行相加,用<+, m+1, n+1>是完全可以包含其所有可能結果的。也就是分數部分位數不變,整數由于可能進位,所以整數部分位數加1,字長也相應加1。
?
圖:兩個相同配置的無符號定點數相加
如果Add節點兩端的定點數配置不同,分數部分位數取A與B中較大值,整數部分位數取A與B中較大值+1,字長等于分數位數與整數位數之和。
?
圖:兩個不同配置的無符號定點數相加
【減法】
無論減數和被減數是否有符號,其結果必然為有符號定點數。也就是兩配置為<+, m, n>的定點數相減,結果為<±,m+1, n+1>,當然兩配置為<±,m, n>的定點數相減,結果依然為<±,m+1, n+1>。
?
圖:定點數的減法
【乘法】
定點數的乘法規則是<+, m, n>與<+, a ,b>相乘,結果為<+, m+a, n+b>。
?
圖:定點數的乘法
【除法】
被除數為最大值,且當除數整數部分全為0,分數部分為0….01這種形式的時候,能夠得到具有最大整數部分的結果,結果即為:
這個結果的整數部分位數為n+a-b。
綜上極限法判斷,得到結果的最大整數部分位數為n+a-b,最大分數部分位數為m-n+b,字長即為二者之和為m+a。因此<+, m, n>與<+, a, b>相除的大結果的表達法為<+, m+a, n+a-b>。
同理,對于兩個有符號的定點數<±,m, n>與<±,a, b>進行相除,結果表示為<±,m+a+1, n+a-b+1>。
圖:定點數的除法
定點數的溢出和湊整?
?
圖:定點數的溢出和湊整設置
【溢出】
當定點數運算后得到的值超過我們所配置的范圍,則會發生溢出。定點數運算的溢出模式有飽和模式(Saturate)和繞回模式(Wrap)兩種。
飽和-如輸出值大于輸出類型可接受范圍的最大值,LabVIEW將強制將該值四舍五入至指定的最 大值。如該值小于可接受范圍的最小值,LabVIEW將值強制轉換為指定的最小值。
繞回-如輸出值在輸出類型可接受范圍之外,LabVIEW將舍棄輸出值的有效位,直到輸出值位于輸出類型的可接受范圍內。該選項要求輸出值符合指定的編碼方式。如選擇該選項便無法指定可接受范圍,因為LabVIEW將自動使范圍符合編碼方式。
?
圖:定點數的溢出
飽和模式下需要完成一次數值的比較。這也是為什么選擇飽和模式將會占用FPGA額外的資源,也正是因為這個原因,飽和模式下的運算將會降低最大時鐘速率。但是不難看出,飽和模式下的計算往往能夠獲得更加準確的結果。
【湊整】
當輸入值或運算結果的精度大于輸出類型的精度時,將發生湊整。這種情況較多的發生在諸如除法,求倒數和平方根這些運算上。
截斷舍入(Truncate)-向下湊整到輸出類型能表示的最近值。LabVIEW將舍棄該值的最低有效位。湊整模式的性能最佳,但得到的輸出值精度最低。
?
圖:截斷舍入
半值向上(Round-Half-Up)-湊整到輸出類型能表示的最近值。如該值正位于兩個有效值之間,該模式將值湊整為兩個有效值中較大的一個。LabVIEW在輸出值上加上最低有效位的一半,然后截斷該值。這種湊整模式比截斷模式的輸出值更準確,但對性能影響較大。
?
圖:半值向上
奇偶舍入(Round-Half-Even)-取整到輸出類型能表示的最近值。如取整的值剛好在兩個有效值之間,LabVIEW將檢查該值中湊整后將成為最低有效位的位。如該位為0,該模式將把值湊整到兩個值中輸出類型能表示的較小的值。如該位不為0,該模式將值湊整到兩個有效值中較大的值。這種湊整模式對性能的影響最大,但其輸出值比截斷模式更準確。該模式也將中和進行多次半值向上的取整后可能出現的趨向較大值的傾向。該模式為默認的湊整模式。
?
圖:奇偶舍入
截斷舍入是相對效率最高的一種模式,但是往往得不到最佳的精度。半值向上模式和奇偶舍入模式對比來看,二者精度可以說旗鼓相當,但是奇偶舍入模式能夠有效避免多次湊整可能會帶來的結果一直趨向較大值得趨勢,這種模式也是LabVIEW默認的湊整模式。
更多信息請登陸NI官網
評論