欢迎光临散文网 会员登陆 & 注册

IEEE754单精度数的表示范围

2022-10-28 17:50 作者:papadogbl  | 我要投稿

有同学问单精度的数据表示范围为什么是下面的范围:                                             

首先解释上面是10进制的科学计数法,E+38代表10^38,E-45代表10^-45。

计算机中浮点表示大都采用IEEE754标准,其中单精度占4B(32位):

                                     1         8-bit                           23-bit

  •  数符S:0表示正数,1表示负数;

  •  阶码E:8位。采用偏置为127的移码,

    即:           阶码 = 127 + 阶数数值

                或   阶数数值 = 阶码 - 127 

    并规定阶码的取值范围为:1~254,阶码值0和255用于表示特殊数值。所以阶数的取值范围:-126~127.

  •  尾数M:23位,采用原码,采用规格化或非规格化表示。对于其中规格化数原码来说,其尾数的最左边一位必定为1(特殊值和非规格化数除外),所以可以把这个1丢掉,而把其后的23位放入尾数字段中。这样,IEEE754中的23位尾数实际上是表示了24位的有效数字。

    关于IEEE754标准更详细的定义可查相关资料,这里不赘述了。

有了上面的解释,我们算一下单精度的数据表示范围:

1)最小正数:

0   00000001 00000000000000000000001 (二进制形式)

0.00000000000000000000001*2^-126 = 2^-23*2^-126

       (非规格化)                                 =2^-149

                                                              ≈ +1.40129846e-45

2)最大正数:

0 11111110 11111111111111111111111 (二进制形式)

1.1111111111111111111111*2^127 =( 1+2^-1+……2^-23 )*2^127

等比数列求和     (规格化)         ≈ 1.99999988*1.701411834e+38

a1*(1-q^n)/1-q                               ≈+3.402823465e+38

 3)最小负数:

1 11111110 11111111111111111111111  (二进制形式)

-1. 11111111111111111111111*2^127 =-( 1+2^-1+……2^-23 )*2^127

               (规格化)                        ≈1.99999988*1.701411834e+38

                                                        ≈-3.402823465e+38

 4)最大负数:

1 00000001 00000000000000000000001   (二进制形式)

-0.00000000000000000000001*2^-126 = -2^-23*2^-126

              (非规格化)                            =-2^-149

                                                                ≈ -1.40129846e-45 


通过上面具体计算,能看到浮点表示数据存在溢出问题:


IEEE754单精度数的表示范围的评论 (共 条)

分享到微博请遵守国家法律