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