CSAPP阅读笔记3——数据编码3
浮点数
浮点数的定义:
$$
d=\sum_{i=-n}^m2^i \times d_i
$$
这个定义导致我们只有在表示$\frac{x}{2^k}$时候是精确的,其它数字的小数部分都会变成循环小数。而由于这些数字的编码长度都是有限的,通过这种表达方式表示的浮点数都是有限的。
IEEE 浮点数标准
以下内容引用自文章【读薄 CSAPP】壹 数据表示
IEEE 的浮点数标准更多是从数值角度来建立的,对于舍入,上溢出和下溢出都有比较统一的处理方法。但与此同时也给硬件优化带来了比较大的困难。因为和平时使用的数制也有一定差异,从理解的角度来看不够直观,但是好在主流的 CPU 都支持浮点数,所以我们不必过多涉及这方面的细节。
在 IEEE 标准中,我们用下面的公式来表达浮点数:
$$
(−1)^sM2^E
$$
其中 s 是符号位,决定正负;M 通常是一个值在 [1.0, 2.0) 的小数;E 是次方数。具体编码时结构如下,这里用单精度、双精度和扩展精度为例:其中 s 是符号位,决定正负;M 通常是一个值在 [1.0, 2.0) 的小数;E 是次方数。具体编码时结构如下,这里用单精度、双精度和扩展精度为例:
下图中 s
对应着符号位,exp
对应着 E(注意,不一定等于 E,因为位数限制表达能力有限),frac
对应着 M
(注意,不一定等于 M
,因为位数限制表达能力有限)。不同的位数就代表了不同的表示能力,也就是单精度,双精度,扩展精度的来源。
形式 | 指数 | 小数部分 |
---|---|---|
零 | 0 | 0 |
非规约形式 | 0 | 大于0小于1 |
规约形式 | 1到$2^e-2$ | 大于等于1小于2 |
无穷 | $2^e-1$ | $0$ |
NaN | $2^e-1$ | 非0 |
例子如下
1 | s exp frac E 值 |
今日体重
评论