浮点数由四部分组成:符号位(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关系到规格化与非规格化,下文将重点介绍。