Appearance
题目
下列数值中,不能用 IEEE 754 浮点格式精确表示的是( )。
错因
B
把 0.25 当成"无法精确表示"——大概因为带小数点。但 ,分母正好是 2 的幂,二进制下有限位写完,能精确表示。混淆了"十进制小数"和"二进制下是否有限"。
C
整数 2.0 显然能精确表示()。选 C 通常是把题目读反了——题面问的是"不能精确表示",把 2.0 当成最特殊的"明显能表示"那项也算反向作答的常见诱因。考试时再次提醒:先在题干上圈出"不能"两个字。
D
,二进制有限位、能精确表示。可能误以为"小数点后位数 ≥ 1 就有问题",但只要分母是 2 的幂(1/2、1/4、1/8 …),二进制都能写成有限位。
总解析
核心判定:一个十进制有限小数能否被 IEEE 754 精确表示,取决于它的分数形式 分母是否是 2 的幂——是 → 二进制下有限位 → 能精确表示;否 → 二进制下无限循环 → 截断后必然损失精度。
逐项判断:
| 选项 | 转换为分数 | 分母 | 二进制 | 精确表示? |
|---|---|---|---|---|
| A. 1.2 | 5(非 2 的幂) | (无限循环) | 不能 | |
| B. 1.25 | 4 = | (有限) | 能 | |
| C. 2.0 | 1 = | = | 能 | |
| D. 2.5 | 2 = | = | 能 |
1.2 的二进制展开(验证无限循环):
| 步骤 | 0.x × 2 | 取整 | 余数 |
|---|---|---|---|
| 1 | 0.2 × 2 = 0.4 | 0 | 0.4 |
| 2 | 0.4 × 2 = 0.8 | 0 | 0.8 |
| 3 | 0.8 × 2 = 1.6 | 1 | 0.6 |
| 4 | 0.6 × 2 = 1.2 | 1 | 0.2 |
| 5 | 0.2 × 2 = 0.4 | 0 | 0.4 ← 回到第 1 步 |
整数部分依次是 0011 0011 0011 …,循环节 0011 永不终止。所以 ,IEEE 754 单精度尾数 23 位强制截断,精度损失。
最终答案是 A(1.2)。
判定口诀:分数形式分母含 5、3、7 等非 2 因子 → 二进制下无限循环 → IEEE 754 不能精确表示。0.1、0.2、0.3、0.4 这种"看起来很整"的十进制小数全都不能精确表示——这是浮点比较常踩的坑。