什么是定点数
顾名思义,在运算中小数点始终不会发生移动的数就是定点数。对于定点数,我们定义了其一共占有的bit位数以及小数点的位置,不同格式的定点数可以表达的数据范围和数据精度也会随之不同。
通常采用<s ,m ,n>这样的一种规范来表示定点数。其中s表示符号位,m表示字长,n表示整数字长。LabVIEW中定点数存储空间,最大限定为64bit。
图:有符号定点数表示方法
比如一个字长为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官网:
http://www.ni.com/zh-cn.html