浮点加减法
- 对阶: 小阶看齐大阶
- 做加减法
- 尾数规格化 (
1.M)01.xxxx/10.xxxx:右规 (尾数溢出)00.0xxx/11.1xxx:左规00.1xxx/11.0xxx:已规格化
- 舍入
- 零舍一入
- 置一
浮点乘除法
已知:
- $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$ 舍入
MIPS
MIPS 中的浮点运算指令
-
单精度
.sadd.ssub.smul.sdiv.s
-
双精度
.dadd.dsub.dmul.ddiv.d