定点c程序之五:定点数的字长效应
由于定点数的字长效应,其数值表示的动态范围较小,在运算过程中需要进行:
饱和处理(Saturation)
当运算(如累加、乘法等)超出最大、最小范围时,将超出最大值的数置为最大能表示的数值(如MAX16、MAX32等);将小于最小值的数表示为最小能表示的数值(如MIN16、MIN32等)。
在累加和乘运算中,结果往往会超出原操作数的字长。例如,两个16位的数相乘得到的是32位的乘积,而结果保存只希望高16比特被存储,即将累加器中的高16比特数存储到普通存储单元,这时,需要对低位比特进行处理:
截尾处理
直接丢弃低16比特。简单,但误差较大;
四舍五入处理(Rounding)
X+0.5,然后做截尾处理
归一化处理
通常对定标浮点数每做一次变化都要重新进行归一化,归一化是为了使其尾数的绝对值在16384~32767之间,从而保证最大的精度。有的DSP处理器提供归一化的指令,能在单指令周期内完成累加器中数值的归一化,一般是norm指令。