IEEE浮点数标准将数表示成形式:
- 符号数:决定了数是负的()还是正的(),其中把数值的符号位解释当做是一种特殊情形。
- 有效数:一个二进制分数,范围要么是在和之间,要么是在到之间。
- 指数:用的幂次方对数值加权。
浮点数的位表示分成3个字段对符号数、有效数、指数进行编码:
-
位的符号字段
s
对符号数进行编码。 - 位的指数字段对指数进行编码;
-
位的分数字段对有效数进行编码,但是编码后的值取决于指数字段
exp
是否等于。
图2.32展示了如何将这3个字段打包成两种最常见格式的字。
标准的浮点数格式.png
- 在单精度浮点数格式(C语言中的
float
)里,字长为位:位表示符号字段s
,位表示指数字段exp
,位表示分数字段frac
。 - 在双精度浮点数格式(C语言中的
double
)里,字长为位:位表示符号字段s
,位表示指数字段exp
,位表示分数字段frac
。
对于单精度浮点数,根据指数字段exp
的值,一个给定二进制表示的数值可分成3种不同的情况:
情形1:可归一化数
特征
指数字段
exp
既不全是0,也不全是1;
指数值;
;
解释:
- 单精度情形下,指数字段
exp
的无符号数范围是1到254,双精度情形下,指数字段exp
的无符号数范围是1到2046; - 解释指数为一个用偏移形式表示的有符号数,即指数值,其中
exp
是位模式为的无符号数,(单精度情形数值为,双精度情形数值为)。据此可得出:单精度情形下指数值的数值范围是到,双精度情形下指数值的数值范围是到。 - 解释有效数为一个二进制表示为的数,等价于有效数,这叫做隐式1开头表示。这样能多表示1位精度,因为通常会调整指数使得有效数满足,且开头的位一直等于1,不需要显式地表示。用字段
frac
来表示分数值,其中,对应的二进制表示为。
情形2:不可归一化数
特征:
指数字段
exp
全是
指数值;
有效数;
解释:
- 有效数,表示分数字段
frac
没有隐式的开头1;
为什么要提供不可归一化数?
- 不可归一化数提供了一种表示的方法
由于可归一化数对应的有效数,所以不能用可归一化数来表示。 - 为了表示非常接近的数。
不可归一化数可提供熟知的渐近下溢性质:所有可能的数值在附近呈均匀分布。
如何表示?
- 符号位
s
是0,即符号数; - 指数字段
exp
全是0,即指数; - 分数字段
frac
全是0,即有效数; - ;
如何表示?
- 符号位
s
是1,即符号数; - 指数字段
exp
全是0,即指数; - 分数字段
frac
全是0,即有效数; - ;
注意:
- 使用IEEE浮点数标准,数值和在有些情形里当做是一样的,有些情形里当做是不一样的。
情形3:特殊值
特征:
指数字段
exp
全是1;
如何表示?
- 指数字段
exp
全是1; - 分数字段
frac
全是0; - 符号位
s
是0,即符号数;
如何表示?
- 指数字段
exp
全是1; - 分数字段
frac
全是0; - 符号位
s
是1,即符号数;
如何表示?
- 指数字段
exp
全是1; - 分数字段
frac
不等于;
两个惯用法:
- 当乘以两个非常大数,或者除以0时,使用无穷大来表示运算结果;
- 当运算结果不能用实数或者无穷大来表示时,就使用来表示;
网友评论