Appearance
题目
某科学实验中,需要使用大量的整型参数,为了在保证表数精度的基础上提高运算速度,需要选择合理的数据表示方法。若整型参数 α 和 β 的取值范围分别为 −2²⁰~2²⁰、−2⁴⁰~2⁴⁰,则下列选项中,α 和 β 最适宜采用的数据表示方法分别是( )。
错因
A
只考虑了"装得下"——没看 β 的范围。α ∈ ±(约 ±)32 位整数(范围 ± ≈ ±)确实能装下;但 β ∈ ±(约 ±),远超 32 位整数 ± 的范围,溢出。题目除了精度还要"提高运算速度",但前提仍是"保证表数精度"——选 A 在 β 这一项上根本表不出来,先违反了精度。
B
把两个变量都套用单精度浮点。问题分两层:
- α 用单精度浪费速度——α 是 ± 内的整数,32 位 int 能精确表示且整数运算比浮点快
- β 用单精度损失精度——单精度尾数 23+1 位,只能精确表示 ± 内的整数,对 ± 范围内大于 的整数会丢精度(落到最近的可表示浮点数),不满足"保证表数精度"
D
α 用单精度(同 B 的第 ① 点)——α 用 32 位整数已足够装下且整数运算更快,单精度浮点是把简单问题复杂化。β 选双精度对了,但 α 选错。
总解析
核心约束:先看"是否能精确表示"(精度),再选"运算最快"的类型。
第一步:列出可选类型的范围与精度
| 类型 | 表数范围 | 整数精确表示范围 | 运算速度 |
|---|---|---|---|
| 32 位整数 | (约 ±) | 范围内全部精确 | 最快 |
| 单精度浮点 | ± | ± 内的整数精确(尾数 23+1 位) | 较慢 |
| 双精度浮点 | ± | ± 内的整数精确(尾数 52+1 位) | 较慢 |
第二步:α ∈ ±
- 32 位整数:,装得下且精确 ✓
- 单精度浮点:,也能精确表示,但整数运算比浮点快 → 不优
- ⇒ α 选 32 位整数
第三步:β ∈ ±
- 32 位整数: → 装不下,溢出 ✗
- 单精度浮点: → 大于 的整数不再能精确表示,精度丢失 ✗
- 双精度浮点: → 可精确表示 ✓
- ⇒ β 选 双精度浮点
最终答案是 C(32 位整数、双精度浮点)。
选择口诀:
- 整数能装下 → 优先用整数(最快)
- 整数装不下 → 看单精度尾数能不能罩住(±)
- 单精度也不够 → 上双精度(±)
关键阈值速记:
| 阈值 | 含义 |
|---|---|
| ± | 32 位整数边界 |
| ± | 单精度浮点能精确表示整数的边界 |
| ± | 双精度浮点能精确表示整数的边界 |