浮点数表示
- 浮点数的表示形式
为了扩大浮点数表示范围和提高表示精度,二进制浮点数表示采用了类似十进制科学记数法的表示方式。即二进制数
N
N
N表示为如下形式:
N
=
2
E
×
M
=
2
±
e
×
(
±
0.
m
)
N = 2^E \times M = 2^{\pm e} \times (\pm 0.m)
N=2E×M=2±e×(±0.m)
按照这一形式:二进制浮点数可以由E(阶码)
,M(尾数)
来表示。E是定点整数,M是定点小数。所以浮点数是用定点数来表示的。
浮点数数据格式如下表:
阶符 | 阶值 | 数符 | 尾数 |
---|---|---|---|
e 0 e_0 e0 | e 1 e 2 e 3 … e k e_1 e_2 e_3 \dots e_k e1e2e3…ek | m 0 m_0 m0 | m 1 m 2 m 3 … m n m_1 m_2 m_3 \dots m_n m1m2m3…mn |
- 浮点数规格化
同一浮点数采用上表的格式去表示,可能存在多种表示形式。
如:
0.01111
×
2
101
0.01111\times 2^{101}
0.01111×2101还可以表示成
0.11110
×
2
100
0.11110 \times 2^{100}
0.11110×2100。这种表示的不唯一性会带来很多麻烦,比如影响软件的可移植性。
归根到底还是浮点数表示的标准不统一。所以就有了规格化处理。
规格化处理
:就是使得尾数最高有效位为1.
规格化处操作
:根据具体形式通过将非规格化尾数进行算术左移或者右移,并同步减少或增加阶码值的操作进行规格化。对应的规格化方法分别称为左移规格化和右移规格化。
两种规格化形式
:
- 尾数绝对值大于或等于0.5
- 尾数绝对值大于1,小于2
两种规格化形式本质上无太大区别,二者尾数最高有效位都是1.
这里主要介绍第二种形式
:
N
=
2
E
×
M
=
2
±
e
×
(
±
1.
m
)
N = 2^E \times M = 2^{\pm e} \times (\pm 1.m)
N=2E×M=2±e×(±1.m)
由于同一了标准,尾数最高位的1在不需要位数来单独表示,可以隐藏。当需要运算时自动恢复。这样可以节省一位。这省略的一位被称为隐藏位
.
- IEEE二进制浮点数标准
- IEEE754单精度浮点数规范
- IEEE754浮点数表示范围
- 浮点数特性:
浮点数在数轴上的表示是不均匀的。
浮点数运算不满足结合律。小数+大数=大数。
溢出
:浮点数绝对值超过正数最大值则为上溢,低于正数最小值则为下溢。
发生下溢的浮点数由于绝对值过小,可以作为机器0处理。
精度溢出
:浮点数不在被表示的刻度上是,会进行舍入。
- 单精度浮点数和真值之间的转换流程
参考资料
[1] 计算机组成原理(微课版)(谭志虎 主编)