一、基本表示
在IEEE标准中,一个浮点数表示如下:
V
=
(
−
1
)
s
×
M
×
2
E
V=(-1)^s\times M\times 2^E
V=(−1)s×M×2E
其中:
- s表示符号(sign),s=1表示负数,s=0表示正数;
- M表示尾数(significand);
- E表示阶码(exponent)。
在单精度浮点格式中,符号位、阶码和尾数的位数分别为1、8、23;在双精度浮点数中,符号位、阶码和尾数的位数分别为1、11、52。
二、三种情况
1.规格化值
当阶码的编码不全为0且不全为1时,该浮点数为规格化的值。阶码的值表示如下:
E
=
e
−
B
i
a
s
E=e-Bias
E=e−Bias其中,e是E的二进制编码,而Bias是一个值为
2
k
−
1
−
1
2^{k-1}-1
2k−1−1的偏置。
尾数定义为:
M
=
1
+
f
M=1+f
M=1+f其中
f
f
f是尾数的二进制编码,是一个大于0小于1的小数,由于尾数隐含了一个1,所以
M
M
M的实际范围是
1
≤
M
<
2
1\leq M< 2
1≤M<2。
2.非规格化值
当阶码的编码全为0时,该浮点苏为非规格化值。此时阶码值为:
E
=
1
−
B
i
a
s
E=1-Bias
E=1−Bias
尾数值为
M
=
f
M=f
M=f此时由于尾数小于1,故不包含隐含的1。
3.特殊值
当阶码的编码全为1时,该浮点数为特殊值,特殊值有三种:
- s=0,尾数编码全为0,浮点数表示正无穷;
- s=1,尾数编码全为0,浮点数表示负无穷;
- 尾数编码不全为0,浮点数表示NaN(Not a Number)。
三、几个特殊值
下表以单精度浮点数为例,列出了几个特殊值的表示方式。
描述 | 阶码 | 尾数 | 值 |
---|---|---|---|
0 | 00…00 | 0…00 | 0 |
最小非规格化数 | 00…00 | 00…01 | 2 − 23 × 2 − 126 2^{-23}\times 2^{-126} 2−23×2−126 |
最大非规格化数 | 00…00 | 11…11 | ( 1 − 2 − 24 ) × 2 − 126 (1-2^{-24})\times 2^{-126} (1−2−24)×2−126 |
最小规格化数 | 00…01 | 00…00 | 2 − 126 2^{-126} 2−126 |
1 | 01…11 | 00…00 | 1 |
最大规格化数 | 11…10 | 11…11 | ( 2 − 2 − 24 ) × 2 127 (2-2^{-24})\times 2^{127} (2−2−24)×2127 |