<>概述
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^n2−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)=-\infty5−(+∞)=−∞、 − ∞ − ( + ∞ ) = − ∞ -\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 10111111010
0⋯00。