公众号旧文

为什么 0.999… = 1?

作者:胖子阅读 —

第一次看到这个等式,很多人都会犹豫:

0.999… = 1

小数点后全是 9,怎么会等于 1?

0.9 比 1 小,0.99 比 1 小,0.999 也比 1 小。照这样想下去,即使后面有无数个 9,似乎也应该“还差一点”。

问题恰恰藏在这里:

“后面还有很多个 9”和“后面有无限个 9”,究竟有什么区别?

我们先用一段动画,把这个问题看清楚。

S 全屏播放 full_screen_mv ,时长00:45 您的浏览器不支持 video 标签 E 视频播放器 S 视频社交 视频详情

先看一个简洁的代数证明。

设:

x = 0.999…

两边乘以 10,小数点向右移动一位:

10x = 9.999…

注意,这两个数的小数部分完全相同,都是无限循环的 9。因此,两式相减时,小数部分恰好抵消:

10x − x = 9

于是:

9x = 9

得到:

x = 1

而我们一开始设定的 x,就是 0.999…。所以:

0.999… = 1。

这个证明很短,却可能没有彻底说服你。你也许仍然想问:那些 9 一直往后写,难道真的没有剩下一点点差距?

要回答这个问题,需要回到“无限循环小数”的含义。

当我们只写有限个 9 时,它与 1 的差距确实存在:

  • 1 − 0.9 = 0.1
  • 1 − 0.99 = 0.01
  • 1 − 0.999 = 0.001

每多写一个 9,差距就缩小为原来的十分之一。

如果小数点后有 n 个 9,差距就是:

10⁻ⁿ。

到这里,你的直觉完全正确:无论 n 多大,只要它是一个有限的整数,这个差距就仍然大于零。

但0.999… 并不是其中某一个有限小数。

它不是写了一百万个 9,也不是写了一亿个 9。省略号表示:9 无限重复,没有最后一位。

在通常的实数体系中,无限循环小数的数值,定义为它的有限截断序列的极限。

也就是说,我们依次观察:

0.9,0.99,0.999,0.9999,……

这些数越来越接近哪个确定的实数,那个数就是 0.999… 所表示的数值。

而这个序列的极限,正是 1。

视频里的数轴也在展示这件事。

0.9 与 1 之间有距离;放大数轴,可以看清 0.99 与 1 的距离;继续放大,还能看清 0.999 与 1 的距离。

这些都是有限小数,所以它们的标记始终在 1 的左侧。

到了表示极限的0.999…,它的标记就应该放在1 所在的同一个点上。

这里并不存在一个“无限接近 1,却永远停在旁边”的另一个实数。

那么,有人想象中的那一点差距,能不能写成:

0.000…1?

这个写法看似合理,却藏着一个问题:那个 1 究竟在小数点后的第几位?

如果它在某个确定的位置,比如第一百万位,那么前面就只有有限个 0。这个数当然大于零,但它并不是“无限个 0 后面再接一个 1”。

如果前面真的有无限个 0,就不存在一个“所有 0 都结束之后”的最后位置,让我们把 1 放进去。

无限小数没有“第无限位”。

还可以换一种方式,检查那个假想的差距。

假设 1 与 0.999… 之间,真的存在一个正的差距 d。

由于 0.999… 不小于它的任何有限截断,这个差距就必须同时满足:

d ≤ 0.1

d ≤ 0.01

d ≤ 0.001

并且对所有继续缩小的 10⁻ⁿ,都成立。

可任何一个正的实数,无论多小,总能找到一个比它更小的 10⁻ⁿ。

因此,不可能有这样的正数 d。差距只能是零。

这也说明,等式成立并不是因为我们把一个很小的误差忽略了,更不是因为计算器把结果四舍五入成了 1。

它是精确的数学相等。

我们平时已经习惯同一个数有不同的写法。比如:

1 = 1.0 = 1.00

1/2 = 0.5

0.999… 和 1 也是如此:写法不同,表示的实数相同。

这道题有趣的地方,在于它提醒我们:面对无限,有限情形中的直觉需要重新检查。

每一个有限小数都小于 1,这句话成立。

它们构成的序列以 1 为极限,这句话也成立。

当我们写下0.999…时,表示的就是这个极限。

所以,下一次再看到这个等式,可以记住:

有限个 9,与 1 仍有距离。

无限循环小数 0.999…,与 1 完全相等。