Skip to content

浮点数运算

考情分析

浮点加减运算是 408 大题的常考内容,通常给出两个浮点数的阶码和尾数,要求完整写出对阶、尾数运算、规格化、舍入四个步骤。选择题则侧重对阶规则(小阶向大阶对齐)和舍入方式的考察。

浮点加减运算步骤

浮点加减法分为四步,顺序不能颠倒:

对阶尾数运算规格化舍入(+ 溢出判断)

第一步:对阶

两个浮点数 A=MA×2EAB=MB×2EB。只有阶码相同时尾数才能直接加减。

原则:小阶向大阶看齐。

EA<EB,则 A 的尾数右移 EBEA 位,阶码变为 EB

为什么不是大阶向小阶?尾数左移会丢失高位有效数字,而右移只丢失低位,精度损失更小且可通过舍入弥补。

WARNING

右移时符号位保持不变(算术右移),移出的低位需要保留,用于后续舍入。

第二步:尾数加减

对阶后两数阶码相同,直接对尾数执行补码加法或减法:

M=MA±MB

与定点补码加减法完全相同,符号位参与运算。

第三步:规格化

运算结果可能不满足规格化条件,需要调整。

左规:结果绝对值太小(如 0.0xxx),尾数左移,阶码减 1,直到最高有效位为 1。左规可能执行多次。

右规:尾数加法产生溢出(双符号位不同,如 01.xxx10.xxx),尾数右移 1 位,阶码加 1。右规最多做一次。

补码下的规格化判定:

正数:0.1xxx负数:1.0xxx

即符号位与最高数值位不同。若相同(0.0xxx1.1xxx),则需要左规。

第四步:舍入与溢出判断

对阶右移和右规都会移出低位数据,需要舍入处理。

舍入方式规则特点
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 入的进位可能使尾数再次溢出,此时需要额外做一次右规。

溢出判断发生在阶码上:

  • 上溢:规格化后阶码超过最大值(如单精度 E>254),结果为 ±
  • 下溢:阶码低于最小值,结果按非规格化数处理或置零

尾数溢出不等于结果溢出——尾数溢出可以通过右规修正。

交互可视化

加载可视化中...

例题

例 1:设浮点数格式为阶码 4 位(补码)、尾数 6 位(补码,双符号位),计算 A+B

A:阶码 [EA]=0101(真值 +5),尾数 [MA]=00.11011

B:阶码 [EB]=0011(真值 +3),尾数 [MB]=00.10111

对阶ΔE=53=2B 阶码小,MB 右移 2 位:

MB00.0010111(下划线部分移出)

阶码统一为 0101

尾数相加

00.11011+00.00101=01.00000

双符号位 01 00,尾数溢出。

右规:右移 1 位,阶码加 1。

01.0000000.10000,E=0101+1=0110(+6)

舍入:右规移出位为 0,无需进位。

溢出判断:阶码 +6 在正常范围内。

结果0.10000×26=1000002=32

验证:A=0.11011×25=27.5÷2×2527B=0.10111×235.75A+B32.75,存在右移时的精度损失,结果合理。

例 2:IEEE 754 单精度,A=1.5B=0.125,求 A+B

A=1.12×20EA=127

B=1.02×23EB=124

对阶:B 尾数右移 3 位,1.0000.001

尾数相加:1.100+0.001=1.101

已规格化,无需调整。结果 = 1.101×20=1.625

浮点乘除法(简述)

浮点乘除法不需要对阶,直接操作阶码和尾数:

A×B:E=EA+EBbias,M=MA×MBA÷B:E=EAEB+bias,M=MA÷MB

乘除后同样需要规格化和舍入。注意移码运算时偏置值的加减。

考点清单

  • [ ] 浮点加减四步:对阶 → 尾数运算 → 规格化 → 舍入
  • [ ] 对阶规则:小阶向大阶对齐(尾数右移)
  • [ ] 规格化条件:补码下符号位与最高数值位不同
  • [ ] 左规可能多次,右规最多一次
  • [ ] 0 舍 1 入的舍入规则,舍入后可能需再次右规
  • [ ] GRS(保护位/舍入位/粘位)用于提高舍入精度,就近舍入是 IEEE 754 的默认模式
  • [ ] 溢出判断在阶码上:阶码超范围才是真溢出
  • [ ] 浮点乘除法:阶码相加减(注意偏置值),尾数相乘除

真题练习

相关真题(3题)

2017Q43综合题13分

整数与浮点数运算精度对比综合题

IEEE 754浮点数运算数据表示(综合)
2015Q14选择题2分

浮点数加减运算中对阶、规格化、舍入与溢出的关系

2009Q13选择题2分

补码浮点数加法运算过程(对阶、尾数加、规格化、溢出判断)