浮点数基础知识

浮点数由四部分组成:符号位(Sign Bit)、尾数(Mantissa)、基数(Radix)和指数(Exponent),如下图所示。

本文将介绍IEEE-754所定义的二进制标准浮点数,即基数为2的情形,如下式,采用类似于图一的表示形式,这里s、m、e分别为符号位、尾数、指数的实际值,n为相应的浮点数的值。

IEEE-754规定了三种浮点数格式:单精度、双精度和扩展精度。其中单精度浮点数为32位,对应于C语言中的float; 双精度浮点数对应于C语言中的double。这里只介绍单精度浮点数和双精度浮点数。

单精度浮点数格式如下图所示,共32位。其中包含1位符号位S,8位指数位E和23位尾数位M。这里S、E、M为相应的二进制序列。当S为0时表示证书,为1时表示负数。值得注意的是M尽管为23位,但它只表示小数点之后的二进制位数。例如,若M为“0110……”,对应的二进制数其实是“.0110……”,这是因为标准规定小数点左边还有一个隐含位,从而尾数的实际值m可能是“1.0110……”,也可能是“0.0110……”。E关系到规格化与非规格化,下文将重点介绍。

1、规格化

当E所表示的二进制序列不全为0也不全为1时,该浮点数为规格化形式。因此指数位对应的实际值e被解释为表示偏置形式的整数,相应的计算公式为:

式中,|E| 表示E的二进制序列代表的整数值;bias为偏置量;k为指数位的宽度,对于单精度而言,k=8,故bias=127。以E = "10001000"为例,相应的 |E| = 136,故 e = 9。对于规格化浮点数,标准规定尾数左侧隐含位为1,故此时m的计算公式为

m = |1.M|

例如,M = "10010000000000000000000",则 1.M = 1.10010000000000000000000。带入上式可得

若符号为0,则此时s=0,e = 9, m = 1.5625。则由以上公式可以计算得出:

猜你喜欢

转载自blog.csdn.net/MaoChuangAn/article/details/82989978
今日推荐