溢出

  • 阶值上溢
    • 正阶值超过可能的最大允许阶值 11111110 (127)
    • 标记为 ±∞
  • 阶值下溢
    • 负阶值小于可能的最小允许阶值 00000001 (-126)
    • 报告为0
  • 有效值上溢 (右规)
    • 同符号的两个有效值相加可能导致最高有效位的进位
    • 通过重新对齐来修补
  • 有效值下溢 (右规)
    • 在有效值对齐过程中, 可能有数字被移出右端最低位而丢失
    • 需要某种形式的四舍五入

IEEE754标准规定的五种异常

  • 无效运算 (结果为NaN)

    • 运算时有一个数是非有限数, 如 : ±∞, ±∞/±∞, 0*±∞等
    • 结果无效, 如 : 0/0, 源操作数为NaN, 一个数对0取余等
  • 有限数除以0 (结果为±∞)

  • 数太大 (阶上溢, 结果为±∞)

    • 如 : 对于单精度, 阶码 > 1111 1110 (127)
  • 数太小 (阶下溢, 结果用非规格化数表示)

    • 如 : 对于单精度, 阶码 < 0000 0001 (-126)
    • IEEE754出现前阶下溢一般为0, 换言之, IEEE754解决了这一问题
  • 结果不精确 (舍入时引起)

    • 如 : 1/3不能精确表示为一个浮点数

加法和减法

  • 必须确保两个操作数具有相同的指数值(阶)

    image-20250119215727353

  • 计算步骤

    • 检查0: X是否等于0? Y是否等于0?

    • 对齐有效值: 阶码向大值对齐

    • 加或减有效值: XS ± YS (原码加减法)

    • 规格化结果

      image-20250119215733804

原码加法操作

image-20250119215739878

  • 尾数加法示例

    image-20250119215747737 我的理解是:

    image-20250119215755365

流程图

image-20250119215819251

  • 示例

    image-20250119215825647 image-20250119215835418

    我的理解是

    image-20250119215848202

上述两处 我的理解 总结: 尾数求补码时, 前面隐藏的那个数也要包括在取反加一的步骤中, 运算结果根据是否进位来判断是否要取结果的补码

乘法和除法

image-20250119215910894

  • 计算步骤

    • 检查0: X是否等于0? Y是否等于0?
    • 阶码相加减**(注意移码bias)**
    • 尾数相乘除
    • 规格化结果
      • 同上

乘法操作

image-20250119215918189

  • 无论哪个操作数是0, 乘积即为0

  • 阶值的和中减去一个偏移量

  • 有效值相乘

  • 结果的规格化和舍入处理

    • 规格化可能导致阶值下溢
    • IEEE754标准中, 只有右规
      • 高两位为01则无需处理
      • 高两位为10或11则右规一位
  • 示例

    image-20250119215923424

除法操作

image-20250119215930456

  • 检查0

    • 如果除数为0, 则报告出错, 或将结果设为无穷大
    • 如果被除数为0, 则结果是0
  • 被除数阶值除数阶值, 加上一个偏移量

  • 有效值相除

  • 结果规格化和舍入处理

    • 规格化可能导致阶值下溢
    • IEEE754标准中, 只有左规
      • 高两位为01则左规一位
      • 高两位为10或11则无需处理
  • 示例

    image-20250119215936954

精度考虑

附加位

  • 寄存器的长度几乎总是大于有效值位长与一个隐含位之和

  • 寄存器包含的这些附加位, 也称为保护位

  • 保护为用0填充, 用于扩充有效值的右端

image-20250119215945962

  • IEEE754规定: 中间结果须在右边加2个附加位

    • 保护位(Guard) : 在尾数右边的位, 左规时被移到尾数中
    • 舍入位(Round) : 在保护位右边的位, 作为舍入的依据

舍入

  • 对有效值操作的结果通常保存在"更长"的寄存器中

  • 当结果转换回浮点格式时, 必须要去掉多余的位

  • 就近舍入(默认方式) : 结果被舍入成最近的可表示的数

    • 非中间值: 0舍1入

    • 中间值: 强制结果为偶数

      image-20250119215954895

  • 朝+∞舍入 : 结果朝正无穷大方向向上舍入, 舍入为 Z1

  • 朝-∞舍入 : 结果朝负无穷大方向向下舍入, 舍入为 Z-1

  • 朝0舍入 : 结果朝0舍入, 正数 Z-1, 负数 Z1

    image-20250119220002468

数据类型

image-20250119220007120

舍入示例

image-20250119220012482

IEEE754并不完美

image-20250119220016307