浮点数在计算机中的存储(三)
三、IEEE754标准中float类型浮点数的存储
1、存储格式
float类型的浮点数在计算机中采用32位表示,具体如下:
1bit |
8bit |
23bit |
s e M
s:符号位
s=0,则该浮点数为正。
s=1,则该浮点数为负。
e:有偏移指数
M:尾数的小数部分
(因为二进制浮点数的标准形式都是1.xxxx *2e ,从中可以发现浮点数的整数位总是1,所以M段存储的其实是小数点后面的位数,不包含1)
2、有偏移指数与实际指数
(1)有偏移指数:e
实际指数:E
(2)有偏移指数 = 实际指数 + 偏移值 (float类型的偏移值是:2 e-1-1 = 27-1 = 127 )
即:e = E + 127
(3)范围问题
在计算机中,float类型用8bit存储e(有偏移指数),所以e的取值范围如下:
二进制 |
十进制 |
0000 0000 |
0 |
0000 0001 |
1 |
0000 0010 |
2 |
…… |
…… |
1111 1111 |
255 |
即:0 ≤ e ≤ 255
因为 e = E + 127
所以得出E的取值范围是:-127 ≤ E ≤ 128
也即,float类型的浮点数,实际指数的取值范围为:-127 ≤ E ≤ 128
(注意:其中,-127和128被用来表示特殊值)
3、规约浮点数与非规约浮点数
(1)规约浮点数:
偏移指数的取值范围是:0 < e < 255 (注意:没有等号了,因为0和255都在特殊值里)
M的取值范围:000 0000 0000 0000 0000 0000 ~ 111 1111 1111 1111 1111 1111
尾数的取值范围是:1 ≤ 尾数 < 2 (尾数的整数部分总是1)
(2)非规约数:
偏移指数:e = 0 (注意:非规约数的偏移值为:126)
M的取值范围:000 0000 0000 0000 0000 0001 ~ 111 1111 1111 1111 1111 1111 (M≠0)
尾数的取值范围是:0 < 尾数 < 1 (尾数的整数部分是0)
(3)特殊值:
e = 0, M = 0, 此时E = -127. N = ±0
e = 255, M = 0, 此时E= 128. N = ±∞
e = 255, M ≠ 0, 此时E= 128. N不是一个数
(4)小结
类别 |
符号位 |
指数域 |
尾数域 |
有偏移指数(十进制) |
实际指数(十进制) |
数值 |
绝对值最大规约数 |
0或1 |
1111 1110 |
111 1111 1111 1111 1111 1111 |
254 |
127 |
1.111……1*2127 ≈ 3.4*1038 |
绝对值最小规约数 |
0或1 |
0000 0001 |
000 0000 0000 0000 0000 0000 |
1 |
-126 |
1.0*2-126 ≈ 1.18*10-38 |
绝对值最大非规约数 |
0或1 |
0000 0000 |
111 1111 1111 1111 1111 1111 |
0 |
-126 |
0.111…1 *2-126 ≈ 1.18*10-38 |
绝对值最小非规约数 |
0或1 |
0000 0000 |
000 0000 0000 0000 0000 0001 |
0 |
-126 |
0.00…1 *2-126 ≈ 1.4*10-45 |
特殊值:±0 |
0或1 |
0000 0000 |
000 0000 0000 0000 0000 0000 |
0 |
-127 |
±0 |
特殊值:±∞ |
0或1 |
1111 1111 |
000 0000 0000 0000 0000 0000 |
255 |
128 |
±∞ |
特殊值NaN |
|
1111 1111 |
0000……1 ~ 1111……1 |
255 |
128 |
不是一个数 |