浮点数

发布时间 2023-04-13 00:13:26作者: 挖洞404

1、介绍
一般,在计算机中的整数数值可以基于补码规则进行表示为比特,而小数择是基于浮点数规则表示为比特。
浮点数规则,本质上是科学计数法的思想,将十进制小数转为二进制数,对一组连续比特位划分,分别表示该二进制数的符号位、指数和底数信息。

注意,在固定长度的比特位中,符号位一般不变,占1位,而指数和底数信息所占的位数是一个竞争关系,会影响所表达的范围和精确度。
之前,各组织分别使用自己的浮点数规则,而1985年,统一的浮点数规则IEEE-754发布,被广泛使用。

2、IEEE-754
该标准采用S,E,M三部分来表示一个数N。主要有单精度float占32位,和双精度double占64位。
(1)符号位S
0表示正数,1表示负数
(2)指数E
float占8位,值的范围[0,255],取中位127表示指数E=0,实际的表示值为127+E,即E的取值范围为[-127,128]
double占11位,取中位1023表示指数E=0,即E的取值范围为[-1023,1024]
(3)尾数M
float占23位,double占52位
尾数实际表达的是1.M,有效位要增加1位小数点前的1

3、表示
将一个十进制小数N表达为浮点数float形式,比如32.25
(1)将N表达为二进制形式,32.25=10 0000.01
(2)科学计数法表示,10 0000.01=1.0 0000 01*2^5
(3)取出尾数0 0000 01,该部分作为高位,其后补0.比如单精度的尾数共占23位
(4)取出指数5,127+5=132,表示为1000 0100
(5)合并,最终表示为0 1000 0100 0 0000 01 0000 0000 0000 0000

4、其他规定
指数 E 非全 0 且非全 1:规格化数字,按上面的规则正常计算
指数 E 全 0,尾数非 0:非规格化数,尾数隐藏位不再是 1,而是 0(M = 0.xxxxx),这样可以表示 0 和很小的数
指数 E 全 1,尾数全 0:正无穷大/负无穷大(正负取决于 S 符号位)
指数 E 全 1,尾数非 0:NaN(Not a Number)