浮点运算

浮点加减法

  1. 对阶: 小阶看齐大阶
  2. 做加减法
  3. 尾数规格化 (1.M)
    1. 原码尾数 (IEEE754)
      1. 存储 bbbbbb $\to$ $1.bbbbbb$
      2. 规格数特征 = 实际尾数 $1.bbbb$
      3. 实际尾数 $0.0bbb\dots$ $\Rightarrow$ 左规
      4. 实际尾数 $10.bbb\dots$ $\Rightarrow$ 右规 (溢出)
    2. 补码尾数
      1. 存储 s.bbbb $\to$ 整体取原码,没有隐藏位
      2. 规格数特征 = 符号位 $\xleftrightarrow{不同}$ 最高位
      3. 尾数 00.0bbb / 11.1bbb $\Rightarrow$ 左规
      4. 尾数 10.bbbb / 01.bbbb $\Rightarrow$ 右规 (溢出)
    3. 基数
      1. 默认基数为 $2$
      2. $\log_{2}基数$ 位中至少有一个 $1$ 为规格化
  4. 舍入
    1. 零舍一入
    2. 置一

浮点乘除法

已知:

  • $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}}$

故步骤为

  1. 尾数乘除

  2. 阶数加减

    • 阶码相加 $$(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]_{补}$$

  1. 规格化 (采用补码存储就对补码规格化)
  2. 舍入

溢出

  • 阶码溢出 $\Rightarrow$ 数量级
    • 阶码上溢 $\Rightarrow$ 认作 $\to \infty$
    • 阶码下溢 $\Rightarrow$ 认作 $\to 0$
  • 尾数溢出 $\Rightarrow$ 细节
    • 尾数上溢 $\Rightarrow$ 右规
    • 尾数下溢 $\Rightarrow$ 舍入

舍入

  • 就近舍入 (0 舍 1 入)
  • 朝 $+\infty$ 舍入
  • 朝 $-\infty$ 舍入
  • 朝 $0$ 舍入
舍入

  1. 只有 右规 & 对阶 时会舍入
  2. 舍入不一定丢失精度,e.g. $1.1000 \to 1.10$