一、IEEE 754浮点数的表示
浮点数数学表示:
符号位(sign):决定该浮点数的正负
尾数(significand):二进制小数,范围在[1,2)或者[0,1)中
阶码(exponent):对浮点数加权,权重为2的E次幂
单精度浮点数:在单精度的浮点数中,符号位编码为1位二进制位,阶码编码为为8位二进制位,尾数编码为23位二进制位;
双精度浮点数:在双精度浮点数中,符号位编码为1位二进制位,阶码编码为为11位二进制位,尾数编码为52位二进制位;
二、浮点数编码知识储备
<1>浮点数阶码的移码表示法:
移码为在真值的基础上加上一个称为偏置值(Bias)的常数,相当于在X轴上移动了若干个单位;移码定义为;
使用移码的优点:可以将真值映射到一个正数域,将移码视为无符号数,可以直接按照无符号整数的比较规则比较阶码的大小。
<2>规格化
为了充分利用尾数的有效位数,通常规定浮点数尾数的最高位需要为一个有效值,这即为浮点数的规格化。
采用浮点数的规格化形式,则浮点数尾数的绝对值大小为 0.5 <= |M| < 1
三、IEEE 754浮点数编码方式
根据阶码的不同,浮点数被编码的情况可以分为3种情况:
<1>规格化数:
1)阶码编码:阶码的二进制编码不全为0和1;使用移码表示阶码的值,阶码的值为E = e -Bias,其中Bias = 2^(k-1)-1;
2)尾数编码:规格化数的尾数编码为浮点数的规格化表示方法,尾数二进制编码表示为;
尾数定义为M = 1 + f,这种表示为隐含的以1开头的表示
<2>非规格化数:
1)解码编码:阶码的二进制编码全部为0,在这种情况下,阶码值是 E = 1 – Bias;
2)尾数编码:尾数的值M=f,不包含隐含的开头的1;
3)用途:
(1)表示数值0
(2)表示接近数值0的数
<3>特殊值:
1)阶码编码:阶码编码全部为1
2)尾数编码:尾数编码全部为0时,表示无穷,S = 0表示正无穷,S=1表示负无穷;当尾数不全为0时,结果数值为NaN(not a number),
即表示不是一个数值
四、IEEE 754浮点编码的性质
以8位浮点数为例,其中阶码编码为4位,尾数编码为3位,如图:
<1>正浮点数的大小按照位表达的字典序升序保持升序;
<2>非规格化浮点数与规格化浮点数之间存在平滑的转换,非规格化浮点数可以平滑转换为规格浮点数;