本帖最后由 hamstar 于 2020-10-7 15:02 编辑
数据规格化用下面的一个简单例子说明:
有一个7位小数精度的数据:0.0000123,由于数据位宽有限,如果需要有效利用位宽,就需要把前面的数据左移,比如左移后数据为0.123e-4,其中指数-4保存在另一个寄存器,记录左移的次数就是记录指数的大小。原来寄存器数据转换为0.123。这样就把数据右边的位宽腾出来,可以保证后续计算的精度。上面只是用十进制简单的说明规格化原理,二进制原理也是一样的。其中浮点和定点(整数)转换就必须使用规格化的原理,如果两个浮点数相加减时的指数不一样,也需要进行规格化处理(这个过程叫作对阶)。如果两个浮点数的指数相差非常大,相加减时就会出现大数吃小数的问题。比如:
0.123e+4 - 0.12e-4 = 0.123e+4 - 0.0000000012e+4 = 0.123e+4.结果就是被减数,这是因为在减操作前,两个浮点数的指数需要完全一致(对阶),需要把指数小的浮点数进行移位,使指数变为+4.但是数据宽度是有限的7位小数精度,0.0000000012e+4这个数右边的数据会被截断变为0.0000000e+4 = 0.
|