概述
IEEE754标准提供了两种规格的浮点格式:32位单精度格式和64位双精度格式。
符号位:1表示负数,0表示正数
尾数:用原码表示。规格化尾数的第一位总为1,因而缺省第一位的1,称该缺省位为隐藏位。IEEE754规定隐藏位1的位置在小数点之前。
阶码:用移码表示,偏置常数为 2 n − 1 − 1 2^{n-1}-1 2n−1−1。
前置知识
关于浮点数的“上溢”与“下溢”:
细节
全0阶码 + 全0尾数:+0、-0
全0阶码 + 非0尾数:非规格化数
非规格化数的隐藏位为0,规定单精度和双精度浮点数的阶分别为:-126、-1022(不是-127、-1023!),故浮点数的值分别为: ( − 1 ) s × 0. f × 2 − 126 (-1)^s\times 0.f\times 2^{-126} (−1)s×0.f×2−126、 ( − 1 ) s × 0. f × 2 − 1022 (-1)^s\times 0.f\times 2^{-1022} (−1)s×0.f×2−1022。
加入非规格化数后,IEEE754单精度浮点数的范围有如下变化:
图中将可表示数以
[
2
n
,
2
n
+
1
)
[2^n,2^{n+1})
[2n,2n+1)的区间分组,同一组内的浮点数的阶均为
n
n
n。对于32位单精度规格化浮点数,尾数有23位,故每个区间内有
2
23
−
1
2^{23}-1
223−1个数,相邻两数的间隔为
2
−
23
×
2
n
2^{-23}\times 2^n
2−23×2n。在图(a)中我们可以看出,在
0
0
0和最小规格化数
2
−
126
2^{-126}
2−126之间有一个间隙。非规格化数就是在这个空隙中插入了
2
23
2^{23}
223个附加数,所有非规格化数的阶均为
−
126
-126
−126,尾数部分的变化范围为
0.00
⋯
0
∼
0.11
⋯
1
0.00\cdots 0\sim 0.11\cdots 1
0.00⋯0∼0.11⋯1。
全1阶码 + 全0尾数: + ∞ 、 − ∞ +\infty、-\infty +∞、−∞
无穷大既可以是操作数,也可以是运算的结果。
当无穷大作为操作数时,系统有如下两种处理方式:
- 产生不发信号的NaN: + ∞ + ( − ∞ ) +\infty+(-\infty) +∞+(−∞)、 + ∞ − ( + ∞ ) +\infty-(+\infty) +∞−(+∞)、 ∞ / ∞ \infty/\infty ∞/∞等
- 产生明确结果: 5 + ( + ∞ ) = + ∞ 5+(+\infty)=+\infty 5+(+∞)=+∞、 ( + ∞ ) + ( + ∞ ) = + ∞ (+\infty)+(+\infty)=+\infty (+∞)+(+∞)=+∞、 5 − ( + ∞ ) = − ∞ 5-(+\infty)=-\infty 5−(+∞)=−∞、 − ∞ − ( + ∞ ) = − ∞ -\infty-(+\infty)=-\infty −∞−(+∞)=−∞等。
全1阶码 + 非0尾数:NaN
NaN(not a number)表示非数,分为发信号和不发信号两种。当尾数最高有效位为1时,表示不发信号的NaN;最高有效位为0时,表示发信号的NaN。
阶码非全0且非全1:规格化非0数
阶码范围为:
1
∼
254
1\sim254
1∼254(单精度)、
1
∼
2046
1\sim2046
1∼2046(双精度),所以阶的范围是:
−
126
∼
127
-126\sim127
−126∼127(单精度)、
−
1022
∼
1023
-1022\sim1023
−1022∼1023(双精度)。
(
−
1
)
s
×
1.
f
×
2
e
−
127
、
(
−
1
)
s
×
1.
f
×
2
e
−
2046
(-1)^s\times 1.f\times 2^{e-127}、(-1)^s\times 1.f\times 2^{e-2046}
(−1)s×1.f×2e−127、(−1)s×1.f×2e−2046
例题
题目1:将十进制数 − 0.75 -0.75 −0.75用IEEA754的单精度浮点格式表示。
解:首先将 0.75 0.75 0.75用二进制表示,得到 ( 0.75 ) 10 = ( 0.11 ) 2 = ( 1.1 × 2 − 1 ) 2 (0.75)_{10}=(0.11)_2=(1.1\times 2^{-1})_2 (0.75)10=(0.11)2=(1.1×2−1)2。所以该数的阶码为 ( − 1 + 127 ) 10 = ( 126 ) 10 = ( 0111 1110 ) 2 (-1+127)_{10}=(126)_{10}=(0111\ 1110)_2 (−1+127)10=(126)10=(0111 1110)2,所以 − 0 , 75 -0,75 −0,75表示为单精度浮点格式为 101111110100 ⋯ 00 101111110100\cdots 00 101111110100⋯00。