浮点数的加减运算过程比定点数复杂,主要分为五个步骤:对阶、尾数求和、规格化、舍入、溢出判定。 重点
考试规范与常见错误 重点
- 预处理: 必须先写出操作数的机器数形式(阶码、尾数的补码形式)。
- 真值还原: 最终答案必须写成真值形式(如 ),不能只停留于补码阶段。
- 进制规范: 阶码是二进制的。严禁出现 9 或 7 等非二进制数字。例如阶码为 时应写为 (表示十进制的 ),若错写为十进制指数需扣分。
- 规格化判别:
- 补码规格化形式为: 或 。
- 左规: 尾数出现 或 时,尾数左移,阶码减 1。
- 右规: 尾数出现 或 (即溢出)时,尾数右移,阶码加 1。 重点
1. 对阶 (Alignment)
对阶的目的是使两个浮点数的小数点位置对齐,即令两数的阶码相等。
- 规则: 小阶向大阶看齐。 重点
- 操作:
- 计算阶差 。
- 若 ,则 向 看齐: 增加,尾数 右移。
- 若 ,则 向 看齐: 增加,尾数 右移。
- 注意: 尾数右移时,最高位补符号位(补码右移规则),最低位移出。移出位可能导致精度损失,需在后续步骤中处理。
2. 尾数求和 (Mantissa Addition/Subtraction)
将对阶后的尾数按定点数加减运算规则进行运算。通常采用双符号位的补码运算。
3. 规格化 (Normalization)
运算结果的尾数必须符合 规格化浮点数 的要求。
- 左规: 当结果为
00.0...或11.1...时,需左移尾数,同时阶码减小。 - 右规: 当结果发生溢出(符号位为
01或10)时,需右移尾数一位,同时阶码加 1。 重点
4. 舍入 (Rounding)
在对阶或右规过程中,尾数低位可能被移出,为减小误差需进行舍入。
- 0 舍 1 入法: 移掉的是 0 则舍去,移掉的是 1 则在尾数末位加 1。
- 恒置 1 法: 无论移掉的是 0 还是 1,都将尾数末位置 1。
- 教材差异: 蒋老师教材中提到,在对阶过程中尾数右移若丢弃了位,直接按舍入原则处理。 重点
5. 溢出判定 (Overflow Check)
浮点数的溢出是以阶码是否溢出为标志的。
- 上溢: 阶码超过了机器所能表示的最大正指数,此时需进行溢出处理。
- 下溢: 阶码小于机器所能表示的最小负指数,通常视为 0 处理。