浮点加减法
- 对阶: 小阶看齐大阶
- 做加减法
- 尾数规格化 (
1.M)- 原码尾数 (IEEE754)
- 存储
bbbbbb$\to$ $1.bbbbbb$ - 规格数特征 = 实际尾数 $1.bbbb$
- 实际尾数 $0.0bbb\dots$ $\Rightarrow$ 左规
- 实际尾数 $10.bbb\dots$ $\Rightarrow$ 右规 (溢出)
- 存储
- 补码尾数
- 存储
s.bbbb$\to$ 整体取原码,没有隐藏位 - 规格数特征 = 符号位 $\xleftrightarrow{不同}$ 最高位
- 尾数
00.0bbb/11.1bbb$\Rightarrow$ 左规 - 尾数
10.bbbb/01.bbbb$\Rightarrow$ 右规 (溢出)
- 存储
- 基数
- 默认基数为 $2$
- $\log_{2}基数$ 位中至少有一个 $1$ 为规格化
- 原码尾数 (IEEE754)
- 舍入
- 零舍一入
- 置一
浮点乘除法
已知:
- $x=S_{x} \cdot r^{j_{x}}$
- $y=S_{y}\cdot r^{j_{x}}$
则
- $x\cdot y=(S_{x}\cdot S_{y})\cdot r^{j_{x}+j_{y}}$
- $\frac{x}{y}=\frac{S_{x}}{S_{y}}\cdot r^{j_{x}-j_{y}}$
故步骤为
-
尾数乘除
-
阶数加减
-
阶码相加 $$(E_{1}+E_{2}){移}=E{1移}+E_{2移}-127$$
实际实现用 $-127=+10000001B \ \mathrm{mod},2^{8}$
-
阶码相减 $$(E_{1}-E_{2}){移}=E{1移}+[-E_{2移}]_{补}+127$$
-
取反补码加法
无论原码/补码/移码,都遵循 减法 $\equiv$ 取反补码加法
$$A-B=A+[-B]_{补}$$
- 规格化 (采用补码存储就对补码规格化)
- 舍入
溢出
- 阶码溢出 $\Rightarrow$ 数量级
- 阶码上溢 $\Rightarrow$ 认作 $\to \infty$
- 阶码下溢 $\Rightarrow$ 认作 $\to 0$
- 尾数溢出 $\Rightarrow$ 细节
- 尾数上溢 $\Rightarrow$ 右规
- 尾数下溢 $\Rightarrow$ 舍入
舍入
- 就近舍入 (0 舍 1 入)
- 朝 $+\infty$ 舍入
- 朝 $-\infty$ 舍入
- 朝 $0$ 舍入
舍入
- 只有 右规 & 对阶 时会舍入
- 舍入不一定丢失精度,e.g. $1.1000 \to 1.10$