Appearance
浮点数运算
考情分析
浮点加减运算是 408 大题的常考内容,通常给出两个浮点数的阶码和尾数,要求完整写出对阶、尾数运算、规格化、舍入四个步骤。选择题则侧重对阶规则(小阶向大阶对齐)和舍入方式的考察。
浮点加减运算步骤
浮点加减法分为四步,顺序不能颠倒:
第一步:对阶
两个浮点数
原则:小阶向大阶看齐。
若
为什么不是大阶向小阶?尾数左移会丢失高位有效数字,而右移只丢失低位,精度损失更小且可通过舍入弥补。
WARNING
右移时符号位保持不变(算术右移),移出的低位需要保留,用于后续舍入。
第二步:尾数加减
对阶后两数阶码相同,直接对尾数执行补码加法或减法:
与定点补码加减法完全相同,符号位参与运算。
第三步:规格化
运算结果可能不满足规格化条件,需要调整。
左规:结果绝对值太小(如
右规:尾数加法产生溢出(双符号位不同,如 01.xxx 或 10.xxx),尾数右移 1 位,阶码加 1。右规最多做一次。
补码下的规格化判定:
即符号位与最高数值位不同。若相同(
第四步:舍入与溢出判断
对阶右移和右规都会移出低位数据,需要舍入处理。
| 舍入方式 | 规则 | 特点 |
|---|---|---|
| 0 舍 1 入 | 移出部分最高位为 1 则末位加 1 | 类似四舍五入,最常考 |
| 恒置 1 | 不论移出位是什么,末位强制置 1 | 不产生进位 |
| 截断(朝零舍入) | 直接丢弃移出位 | 最简单,误差最大 |
| 就近舍入(IEEE 默认) | 四舍五入,中间值向偶数舍(banker's rounding) | 精度最高 |
保护位、舍入位与粘位(GRS)
为了减少右移时的精度损失,硬件在尾数右侧额外维护三位:
| 位 | 名称 | 作用 |
|---|---|---|
| G(Guard) | 保护位 | 右移时移出的第 1 位 |
| R(Round) | 舍入位 | 右移时移出的第 2 位 |
| S(Sticky) | 粘位 | 右移时所有更低位的或(只要有任何一位为 1,S 就为 1) |
GRS 位参与就近舍入的判断:
- GRS =
0xx:直接截断(不进位) - GRS =
1xx且不是恰好中间值:进位(末位 +1) - GRS =
100(恰好中间值):向偶数舍入(末位为 1 则进位,为 0 则截断)
0 舍 1 入的进位可能使尾数再次溢出,此时需要额外做一次右规。
溢出判断发生在阶码上:
- 上溢:规格化后阶码超过最大值(如单精度
),结果为 - 下溢:阶码低于最小值,结果按非规格化数处理或置零
尾数溢出不等于结果溢出——尾数溢出可以通过右规修正。
交互可视化
例题
例 1:设浮点数格式为阶码 4 位(补码)、尾数 6 位(补码,双符号位),计算
对阶:
阶码统一为
尾数相加:
双符号位 01 00,尾数溢出。
右规:右移 1 位,阶码加 1。
舍入:右规移出位为 0,无需进位。
溢出判断:阶码
结果:
验证:
例 2:IEEE 754 单精度,
对阶:
尾数相加:
已规格化,无需调整。结果 =
浮点乘除法(简述)
浮点乘除法不需要对阶,直接操作阶码和尾数:
乘除后同样需要规格化和舍入。注意移码运算时偏置值的加减。
考点清单
- [ ] 浮点加减四步:对阶 → 尾数运算 → 规格化 → 舍入
- [ ] 对阶规则:小阶向大阶对齐(尾数右移)
- [ ] 规格化条件:补码下符号位与最高数值位不同
- [ ] 左规可能多次,右规最多一次
- [ ] 0 舍 1 入的舍入规则,舍入后可能需再次右规
- [ ] GRS(保护位/舍入位/粘位)用于提高舍入精度,就近舍入是 IEEE 754 的默认模式
- [ ] 溢出判断在阶码上:阶码超范围才是真溢出
- [ ] 浮点乘除法:阶码相加减(注意偏置值),尾数相乘除