CSAPP阅读笔记4——数据编码4
浮点数2
舍入
对于浮点数的加法和乘法来说,我们可以先计算出准确值,然后转换到合适的精度。在这个过程中,既可能会溢出,也可能需要舍入来满足 frac 的精度。
在二进制中,我们舍入到最近的偶数,即如果出现在中间的情况,舍入之后最右边的值要是偶数,对于十进制数,例子如下:
1 | 原数值 舍入结果 原因 |
对于二进制数也是类似的
1 | 十进制 二进制 舍入结果 十进制 原因 |
浮点数加法
这里假设 E1>E2,结果是 ,其中
- 如果 M 大于等于 2,那么把 M 右移,并增加 E 的值
- 如果 M 小于 1,把 M 左移 k 位,E 减少 k
- 如果 E 超出了可以表示的范围,溢出
- 把 M 舍入到 frac 的精度
基本性质
- 相加可能产生 infinity 或者 NaN
- 满足交换率
- 不满足结合律(因为舍入会造成精度损失,如
(3.14+1e10)-1e10=0
,但3.14+(1e10-1e10)=3.14
) - 加上 0 等于原来的数
- 除了 infinity 和 NaN,每个元素都有对应的倒数
- 除了 infinity 和 NaN,满足单调性,即
浮点数乘法
结果是 ,其中
- 如果 M 大于等于 2,那么把 M 右移,并增加 E 的值。
- 如果 E 超出了可以表示的范围,溢出
- 把 M 舍入到 frac 的精度
基本性质
- 相乘可能产生 infinity 或者 NaN
- 满足交换率
- 不满足结合律(因为舍入会造成精度损失)
- 乘以 1 等于原来的数
- 不满足分配率
1e20*(1e20-1e20)=0.0
但1e20*1e20-1e20*1e20=NaN
- 除了 infinity 和 NaN,满足单调性,即 a≥b→a×c≥a×b
今日体重
又回去了,虽然跑了个一两天步,但感觉总体运动量还是不太够
评论