本节将介绍浮点数的表示方法。许多具有专用浮点单元(Float-Point Unit,FPU)的数字信号处理器中广泛使用浮点处理单元。但是不建议使用浮点处理,这是因为:
(1)运算速度慢。
(2)占用大量的逻辑设计资源。
但是,某些情况下FPU也是必不可少的。例如,在需要一个很大动态范围或者很高计算精度的应用场合。
此外,使用浮点可能使得设计更加简单。这是因为在定点设计中,需要最好地利用可用的动态范围。但是,在浮点设计中,不需要考虑动态范围的限制。
浮点数可以在更大的动态范围内提供更高的分辨率。通常,当定点数由于受其精度和动态范围所限不能精确表示数值时,浮点数能提供更好的解决方法。当然,也在速度和复杂度方面带来了损失。大多数的浮点数都遵循单精度或双精度的IEEE浮点标准。标准浮点数字长由一个符号位 S 、指数 e 和无符号(小数)的规格化尾数 m 构成,如图4.2所示。
图4.2 浮点数的格式
浮点数可以用下式描述:
X =(-1) S 1. m ·2 e - bias
对于IEEE-754标准来说,还有下面的约定:
(1)当指数 e =0,尾数 m =0时,表示0。
(2)当指数 e =255,尾数 m =0时,表示无穷大。
(3)当指数 e =255,尾数 m !=0时,表示NaN(Not a Number,不是一个数)。
(4)对于最接近于0的数,根据IEEE-754的约定,为了扩大对0值附近数据的表示能力,取阶码 P =-126,尾数 m =(0.00000000000000000000001) 2 。此时该数的二进制表示为0 00000000 00000000000000000000001。IEEE给出了单精度和双精度格式的参数,如表4.8所示。
表4.8 IEEE的单精度和双精度格式的参数