IEEE浮点数标准
IEEE浮点数标准
阅读笔记:Computer System : A Programmmer's Perspective
基本概念
IEEE浮点数标准采用
的形式表示一个数:
-
符号:s决定数的正负
-
尾数:M是一个二进制小数,范围是1~2-epsilon 或者 0~1-epsilon
-
阶码:E的作用是对浮点数加权,权重为2的E次幂
下图为单精度(32位)与双精度(64位)的位示意图:
单精度:
- s:1位
- exp:k=8位
- frac:n=23位
双精度:
- s:1位
- exp:k=11位
- frac:n=52位
三个字段的编码:
-
单独的s直接编码符号s
-
k位的阶码字段:
\[exp=e_{k-1}e_{k-2}\cdots e_{1}e_{0} \]
编码E
- n位的小数字段:\[frac=f_{n-1}f_{n-1}\cdots f_{1}f_{0} \]
编码M
编码的三种情况
规范化值
当exp的位即不全为0也不全为1时(即单精度范围:1~254 双精度范围:1~2046),即为规范化的值。这种情况下,阶码字段可以被解释为以偏置量(bias)形式表示的有符号整数
其中:exp即为阶码字段表示的值,并有
故对于单精度bias=127,双精度bias=1023,由此可得:
或者是:
因此指数的范围:
或者是:
小数字段被解释为描述小数值f,0≤f<1,即:
尾数定义为:
非规范化值
当阶码域全为0时,表示的数是非规范化的,此时的阶码为
故E=-126(单精度)或者E=-1022(双精度)而尾数:
同理0≤f<1,即:
用途:
- 表示数值0
- 表示非常接近0的数
特殊值
- 无穷大
阶码全为1且小数字段全为0,根据符号位表示±∞
- NaN
阶码全为1且小数字段不全为0,这不是一个数(Not a Number)
总结
值的表示:
单精度:
-
规范值:
E=exp-bias
bias=127
M=1+f
-
非规范:
E=1-bias=-126
bias=127
M=f
双精度:
-
规范值:
E=exp-bias
bias=1023
M=1+f
-
非规范值
E=1-bias=-1022
bias=1023
M=f
示例
Q1.将-3.33333333转换为单精度表示
首先,将这个小数转化为二进制的小数形式(利用×2法)
规范化:
因此:
从而可以写出单精度表示
Q2.给出如图8位二进制数在IEEE标准的浮点格式
首先对于规范化值:
对于非规范值:
可以写出如下表格: