实验1 · 整数是怎样表示的?
范围: 0 ~ 65535
13 = 1101₂
快捷示例:
二进制位构成 (对应权值 2ᵏ):
教学结论:在一定整数范围内,整数能被有限个 2ᵏ 权值精确表示。
实验2 · 0.1 + 0.2 真的等于 0.3 吗?
高精度 17 位机器数展示
观察值: 0.1
0.10000000000000001
0.1 + 0.2 == 0.3
false
(0.1 + 0.2) - 0.3 = 5.551115123125783e-17
为什么会这样?二进制小数的有限与无限
十进制与二进制基数差异
示例A: 0.5₁₀ = 0.1₂
1 × 2⁻¹,可以有限精确表示
示例B: 0.1₁₀ ≈ 0.000110011001…₂
无限循环,只能存储近似截断值
数学 0.1
→
转二进制
→
无限展开
→
有限位截断
→
最接近机器数
误差极其微小,但不严格为0(计算机并未算错,是表示机制决定的)
概念示意:不要求掌握 IEEE 754 细节
实验3 · while (fabs(item) >= eps) 怎样控制循环?
教学说明:内部累加 π/4,最终展示 π = 4 × sum步骤 1
判断条件
步骤 2
累加当前项
步骤 3
改变符号
步骤 4
分母 + 2
步骤 5
计算下一项
循环终止
已执行轮次
第 0 轮
分母 (den)
1
当前项 (item)
1.000000000000
绝对值 fabs(item)
1.000000000000
循环条件判定表达式
等待启动
|1.000000| >= 0.01
准备就绪
当前 π 近似值 (4 × sum)
|π - Math.PI| = -
0.00000000000000
边界观察:当 fabs(item) 接近或到达 eps 时,>= 相比 > 会多执行一次累加。
机器比较的是真实浮点存储近似值
| 轮次 | 分母 (den) | 当前项 (item) | fabs(item) | 条件判断 | π 累加值 (4×sum) |
|---|