浮点数的表示
科学计数法
任意一个十进制数N可以写成:
同样,在计算机中一个任意进制数N可以写成
在计算机的世界里R默认是2,表示二进制,因此R在计算机中不用单独存储,而M和e需要单独存储
尾数(M):用定点小数表示,给出有效数字的位数,决定了浮点数的表示精度
阶码(E):表示指数(并不等同于e,他们之间有一种对应关系),用整数形式表示,指明小数点在数据中的位置,决定了浮点数的表示范围
比例因子(R):不表示,默认值,一般为2
问题:在计算机中各个部分分别占据多少位?
IEEE754标准浮点数的表示方法
单精度float总共32位,
32位的浮点数中:
S:浮点数的符号位(即最高位表示符号位),占1位,0表示正数,1表示负数
M:尾数,占23位,用小数表示,小数点放在尾数域的最前面
E:阶码,占8位,阶符采用隐含方式,即采用移码方式来表示正负指数
指数e和阶码E之间的对应关系,应将指数e加上一个固定的偏移值,即:E=e+127
IEEE754标准中,一个规格化的32位浮点数 x的真值可表示为:
其中(-1)^s,s表示符号位,s=0则(-1)^0=1为正数,s=1则(-1)^1=-1为负数;
M表示阶码,默认为1 * M,e=E-127
其中,S、M、E都存在计算机中,而其它数值都是默认固定的
64位的浮点数:
S:浮点数的符号位(即最高位表示符号位),占1位,0表示正数,1表示负数
M:尾数,占51位,用小数表示,小数点放在尾数域的最前面
E:阶码,占11位,阶符采用隐含方式,即采用移码方式来表示正负指数
同理一个规格化的64位浮点数x的真值为:
例:
说明:
(1.75)10 = 1.11 * 2^0
对于32位的浮点数来说:
所以因为是正数S=0
因为是1.M的格式,所以M=1100000...0 (因为总共23位,存在2个1,所以后面21个0)
因为e=0,而E=127+e,所以E=127
补充说明:
(1)当阶码E为全0(0000,0000)且尾数M也为全0时,表示的真值x为零,结合符号位S为0或1,有正零和负零之分。
(2)当阶码E位全1(1111,1111即255)且尾数M为全0(0000,0000)时,表示的浮点数为无穷大,结合符号位S为0或1,也有+无穷和-无穷之分
因此在32位浮点数表示中,要除去E用全00000000和全11111111(255)10表示零和无穷大的特殊情况,因此阶码E的取值范围为00000001(1)到11111110(254);又因为e=E-127,所以e的取值范围为(1-127) ~ (254-127)即 -126 ~ +127