Skip to content
难度中等(★★)
建议时长90分钟
本课难点
  • “阶码决定范围、尾数决定精度”的辨析题(概念题高频)
  • 对阶规则:小数向大数看齐;尾数算术右移保持符号
  • 按题干位段(阶符/阶码/数符/尾数)分别套用移码/补码范围推极值

1.1.4 浮点数表示

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

本节导学:浮点数把“小数点位置”变成可编码的信息

定点数的小数点位置固定,适合表示金额、计数器、地址偏移这类范围相对可控的数据。但科学计算、工程仿真、图形处理里经常同时出现极大的数和极小的数。若仍用定点数,要么范围不够,要么为了范围牺牲大量精度。

浮点数的思路是把一个数拆成两部分:

数值=有效数字×基数指数=尾数×基数阶码

它不是“更精确的定点数”,而是在有限位宽下重新分配能力:阶码负责范围,尾数负责精度。软考最喜欢用这一句话做概念判断。

1. 从定点到浮点:技术为什么要迭代

表示方式思想优点缺陷适用场景
定点整数小数点固定在最右侧运算简单、精确、硬件实现直接不能表示小数;范围由位数直接限制计数、地址、整数运算
定点小数小数点固定在符号位后适合表示绝对值小于 1 的小数很难同时表示极大值和极小值固定比例的小数运算
浮点数小数点位置由阶码控制表示范围大,能覆盖不同数量级只能近似表示多数实数;运算要对阶、舍入、规格化科学计算、图形、机器学习、工程数据

所以浮点数不是“淘汰定点数”,而是补上定点数在大范围实数表达上的短板。代价也很明确:浮点数更复杂,并且会带来舍入误差。

2. 浮点数的字段结构

通用教材里的浮点格式可以抽象成:

浮点数字段结构

课程里强调:二进制浮点数的基数 R=2 通常不需要单独存储,因为机器已经默认。真正占位并参与考题的是阶码和尾数。

图里上半部分是原理表达:V=M×RE;下半部分是软考题里常见的字段拆分方式:阶符、阶码值、数符、尾数值。

不同教材、不同题目对字段拆分可能不同。软考范围题的原则是“题干怎么给字段,就按题干字段算”,不要强行套 IEEE 754。

3. 阶码决定范围,尾数决定精度

阶码控制小数点能移动多远,因此决定数量级;尾数控制能保留多少有效位,因此决定精细程度。

1.2345×108阶码大,数量级大1.2345×108阶码小,数量级小1.2×108尾数短,有效数字少1.234567×108尾数长,有效数字多
问题主要由谁决定直观解释软考关键词
能表示多大、多小阶码位数指数能把小数点推多远表示范围、上溢、下溢
能表示多精细尾数位数有效数字能保留多少位精度、有效位、舍入误差
正负号数符整个浮点数的正负数符、符号位
指数正负阶符或移码小数点向左还是向右移动阶符、阶码、偏置

如果选择题问“浮点数可表示范围主要取决于什么”,优先找阶码;问“有效精度主要取决于什么”,优先找尾数。

4. 为什么阶码常用移码,尾数常用补码

阶码的主要任务是表示指数大小,并且经常需要比较两个浮点数的阶码,以便进行对阶。移码把负指数、零指数、正指数映射到一个更适合按无符号数比较的序列中,所以常用于阶码。

尾数要参与加减运算。补码的优势是能把加法和减法统一到加法器上,因此传统教材常说尾数常用补码表示。到了 IEEE 754,尾数部分又采用了更规范化的符号、指数、尾数字段设计,其中指数使用偏置思想,尾数保存规格化有效数字。

字段常见表示为什么这样设计替代或规范化的原因
阶码移码/偏置码便于比较指数大小统一格式后,硬件和软件都能按标准解释
尾数补码或原码思想下的有效数尾数需要参与运算或表示有效数字IEEE 754 统一了符号、指数、尾数的解释方式
基数通常固定为 2不必浪费字段保存固定基数让硬件实现更简单

这也是技术迭代的典型模式:早期教材抽象便于理解原理,工程标准则更强调跨平台一致性、异常值处理、舍入规则和硬件实现。

5. 对阶:小阶向大阶看齐

两个浮点数相加时,不能直接把尾数相加,因为它们可能处在不同数量级上。

十进制例子:

0.123×103+0.456×101

第二个数的阶码小,需要向第一个数的阶码 3 看齐:

0.456×101=0.00456×103

于是:

0.12300×103+0.00456×103=0.12756×103

二进制里也是同样原则:把小阶码调大,同时尾数右移来保持真值不变。有符号尾数右移时要用算术右移,也就是高位补符号位,避免正负号被破坏。

6. 浮点加减的完整流程

浮点加减运算流程

“对阶”解决能不能加,“规格化”解决表示是否规范,“舍入”解决位数不够,“溢出检查”解决结果是否还在可表示范围内。

7. 规格化:让同一个数只有一种主要写法

同一个十进制数可以写成多种科学计数法形式:

12.3×102=1.23×103=0.123×104

如果机器允许任意形式,比较和后续运算都会变复杂。规格化就是约定尾数必须落在某个范围内,使有效位尽量靠前。

二进制教材里常见约定是尾数绝对值落在某个固定区间,例如 [0.5,1)。如果尾数太大,就右移尾数、阶码加大;如果尾数太小,就左移尾数、阶码减小。

规格化的好处是提高尾数字段利用率,减少同值多码;代价是每次运算后可能需要额外调整。

8. IEEE 754:从“会表示”走向“大家都按同一套规则表示”

软设通常不深挖 IEEE 754 的每个特殊值,但要知道它解决了什么问题。没有统一标准时,不同机器可能用不同浮点格式,同一个二进制串在不同平台上解释不同,运算结果也难以保证一致。

层面自定义浮点格式IEEE 754 标准化格式
可移植性不同机器格式可能不同跨平台解释一致
指数可能用阶符+阶码,也可能用移码使用偏置指数思想
尾数教材题常按补码/原码讨论规格化有效数字,配合隐藏位等设计
异常值处理方式不统一规定无穷大、NaN、非规格化数等
代价简单题易算标准细节更多,硬件实现更复杂

单精度 IEEE 754 的字段常被概念性提到:

IEEE 754 单精度字段

考试如果没有明确说 IEEE 754,就按题干自定义字段来算;如果明确说 IEEE 754,再考虑偏置指数等标准规则。

9. 范围题的解题框架

遇到“某浮点格式有若干位阶码、若干位尾数,求最大值/最小值/范围”时,不要直接套背诵答案,按下面拆:

  1. 找阶码字段:判断阶码用移码、补码,还是单独阶符加阶码值。
  2. 求阶码可表示的最大指数和最小指数。
  3. 找尾数字段:判断尾数是定点小数、补码小数,还是题干另有规定。
  4. 求尾数绝对值能取到的最大有效值。
  5. 组合成 M×2E
  6. 判断是否要求规格化、是否包含 0、是否问正数范围还是全体范围。

软考陷阱通常在第 1 步和第 3 步:把阶码码制看错,或者把尾数小数当成整数。

🧪 例题(按难度)

简单(3题)

例题1(概念题:范围/精度)

单选
浮点数能表示的数值范围主要由( )决定;能表示的有效精度主要由( )决定。
单选
对阶时若将某个浮点数的阶码增大(指数变大),为了保持数值不变,其尾数应如何变化?
单选
浮点数加/减运算的一般流程是:

中级(3题)

例题2(对阶规则)

单选
以下关于两个浮点数相加的叙述中,正确的是:
填空
两浮点数相加前需对阶:若 `E1=10`、`E2=7`,按“小数向大数看齐”的规则,需要把阶码较小的那个数的尾数右移多少位?
单选
IEEE 754 单精度浮点数的指数采用偏置(移码思想)表示,其偏置值(bias)是:

困难(1题)

例题3(范围题:按题干位段推范围)

设 16 位浮点数格式为:阶符 1 位、阶码 6 位、数符 1 位、尾数 8 位。

  • 阶码(指数部分)用 移码 表示(此处按题干:指数总位数=阶符+阶码=7 位)
  • 尾数(纯小数)用 补码 表示(数符+尾数=9 位定点小数)

问:该浮点数可表示的数值范围(近似写法)最合理的是:

单选
选择最合理的范围表达式:

📚 本课小结

  • 浮点数:尾数×基数阶码
  • 阶码位数决定范围;尾数位数决定精度
  • 加减流程:对阶(小数向大数看齐)→ 尾数运算 → 规格化