IEEE浮点标准用
C语言中,单精度(float)的s为1b,E为8b,M为23b,双精度(double)的s为1b,E为11b,M为52b。
浮点数分类
规格化的值
exp的位模式(E的位模式)既不全为0(数值0),也不全为1(float为255,double为2047)
阶码的值E=e-Bias,e是无符号数,Bias为偏置值,等于
小数frac的位模式(M的位模式)描述小数f,尾数M=1+f,尾数M在范围1≤M<2之中
非规格化的值
阶码域全为0
阶码值E=1-Bias(float为-126,double为-1022),尾数M=f
阶码定义为1-Bias,而不是定义为直观的-Bias,这样做是为了使得数值从非规格化到规格化的平滑过渡,如下图右侧蓝色圈中所示。
非规格值可以用来表示0(有+0.0和-0.0的区别)和接近于0.0的值
特殊值
阶码全为1
(1)当小数域全为0时,表示无穷,当s=0时是+∞,当s=1时是-∞,无穷能表示溢出的结果
(2)当小数域为非0时,表示NaN,即不是一个数(Not a Number)
数字示例
十进制数12345具有二进制[0011 0000 0011 1001](0x3039),通过将二进制小数点左移13位,得到这个数的一个规格化表示
(0x00003039)00000000000000000011000000111001
(0x4640E400)01000110010000001110010000000000
注意到,整数的最高有效位1以外,其余位都在浮点数中,且和浮点表示的小数段高位相匹配。