1、什么是IEEE754标准
用来规范化浮点数,其格式是
(1)32位
x=(-1)s×(1.M)×2E-127 e=E-127
(2)64位
x=(-1)s×(1.M)×2E-1023 e=E-1023
其中,s是符号位,M是尾数,E是阶码,e是实际的指数值
表 三种形式的IEEE754浮点数格式
参数 | 单精度浮点数 | 双精度浮点数 | 扩充精度浮点数 |
浮点数字长 | 32 | 64 | 80 |
尾数长度P | 23 | 52 | 64 |
符号位S | 1 | 1 | 1 |
指数长度E | 8 | 11 | 15 |
最大指数 | +127 | +1023 | +16383 |
最小指数 | -126 | -1022 | -16382 |
指数偏移量 | +127 | +1023 | +16383 |
可表示的实数范围 | 10-38~1038 | 10-308~10308 | 10-4932~104932 |
浮点数表示格式如下:
数符号S | 阶符Es | 阶码E | 尾数M |
2、为什么阶码的偏移量是127?
先看下什么机器零:
(1)当浮点数尾数M=0,无论阶码E为何值,则该浮点数为0值
(2)当阶码的值遇到比它所能表示的最小值还小时,不管尾数M为何值,则浮点数为0值
(1)、(2)中的零值称为机器零
以32位浮点数为例:
"当阶码E 为全0且尾数M 也为全0时,表示的真值x 为零,结合符号位S 为0或1,有正零和负零之分。当阶码E 为全1且尾数M 为全0时,表示的真值x 为无穷大,结合符号位S 为0或1,也有+∞和-∞之分。这样在32位浮点数表示中,要除去E 用全0和全1(255)10表示零和无穷大的特殊情况,指数的偏移值不选128(10000000),而选127(01111111)。对于规格化浮点数,E 的范围变为1到254,真正的指数值e 则为-126到+127。因此32位浮点数表示的绝对值的范围是10-38~1038(以10的幂表示)。"——引自 白中英<<计算机组成原理>>
S(1位) E(8位) M(23位) N(32位)
符 0 0 (-1)S *2E-127·(1.M) 为规格化数
0 不等于0 (-1)S*2-126*(0.M) 为非规格化数
号 1到254之间 不等于0 (-1)S*2E-127*(1.M) 为规格化数
255 不等于0 NaN(非数值)
位 255 0 无穷大
其中红色字0、1表示隐含位,注意当数字N为非规格化数或是0时,隐含位是0。
如果选择偏移值128时,假设指数(不是阶码)为+127,按照e=E-128,则阶码为127+128=255,全为1 ,由上表可知N为NaN和无穷大
假设指数为0(包括正0和负0),按e=E-128,则正0+128=128,负0(补码)+128=0,由上可知E=0时,存在非规格化数
由于8位E中,只有7位有效数字,7位能表示的大小为0-127,所以偏移量可以在0-127中任取一值,在IEEE754Z中规定取127.
3、为什么阶码表示的最小指数是-126呢?
有2中描述可以得到,当偏移量为127时,若最小指数是-127,按e=E-127,则127+(-127)=0,E=0,存在非规格化数
故取-126,这也符合E的表示范围1~254。