圆周率π 的十进制小数位是随机的吗?

2025-07-25 01:52:41 69

无论我们使用何种方法计算π,只要方法正确,我们总会得到相同的小数位序列。尽管这个序列永远不会表现出任何周期性(因为π是一个无理数,实际上是一个超越数),因此它不能表示为两个整数的比值。然而,如果我们探索足够长的π小数序列,会发现一个有趣的现象:各个数字出现的频率非常相似。也就是说,数字 0,1,2,...,90,1,2,...,9 出现的概率大致相同(这一特性不依赖于π是否以10进制表示。无论选择何种进制,都会出现相同的行为)。

由于这一特性与来源于离散均匀分布(discrete uniform distribution)的随机数所具有的特性相同,因此,除非我们事先知道某些数字是π的小数位,否则我们将无法将它们与一个具有10个等可能位置的轮盘(roulette)所产生的随机数区分开来。具有这种性质的数字被称为正规数(normal numbers)。

就π而言,至少基于目前计算出的所有小数位进行检验,它已被证实是正规的。然而,尚未被严格证明π在无限多位小数上将会是正规的(would be normal),尽管所有迹象都表明它将会是。

为了将 π 的小数位转换为列表元素,我们使用 RealDigits 函数将 π 的十进制近似值分解为一个数字列表。例如:3.14159... 将变为:

末尾的 1 表示列表的第一个元素对应整数部分(即个位数)。如果我们只想获取小数部分,可以从 3.14159... 中减去整数 3:3.14159... - 3 = 0.14159...。例如,π 的前 10 位小数如下所示:

以下表达式使我们能够在短时间内找到 π 的特定位数。在下面的示例中,我们将找到第 10,000,000 位小数。

这个简短表达式告诉我们,在 π 的前 100,000 位小数中,数字 0-9 各自出现的频率。

上述输出结果似乎证实:在十进制下,所有数字出现的概率大致相同。这表明它们遵循离散均匀分布(discrete uniform distribution)。

--为了对 π 的前 10,000 位小数验证这一假设,我们结合使用 DistributionFitTest 和 DiscreteUniformDistribution 函数。

vals = RealDigits[N[Pi - 3, 10000]][[1]];h = DistributionFitTest[vals, DiscreteUniformDistribution[{mu, omega}], "HypothesisTestData" ];h[{"TestDataTable", All}]

P 值大于 0.05(如本例所示)表明数据来源于离散均匀分布。如果这一点成立,那么 π 将是一个正规数(normal number)。

--以下命令将返回数字 0-9 出现的频率,该频率是关于计算中所用总位数的函数。

Manipulate[ BarChart[ BinCounts[RealDigits[N[Pi - 3, 10000]][[1, 1 ;; u]], {0, 10, 1}], ChartLabels -> Range[0, 9] ], {{u, 100, "Total Number of Digits"}, 1, 10000, 1, Appearance -> "Labeled"} ]

在离散均匀随机分布中,所有数字组合都是可能的。然而,其中一些组合发生的概率极低。例如:同一个数字(在此指 0 到 9 之间的任意一位数字)连续重复出现的概率就非常小,尽管这种情况有时确实会发生。

让我们创建一个命令来识别 π的小数位中何时出现这种情况。

--Split 函数在将列表划分为由相同元素组成的子列表时非常有用。

--请注意,有些子列表包含多个元素。这种情况发生在某个数字连续重复一次或多次时。通过以下函数,我们可以计算每个子列表的大小(元素个数):

我们发现,在 6 种情况中,一个数字连续重复出现了一次(即形成两个相同数字的序列),且没有任何数字连续出现 3 次或以上的情况。

--以下函数用于统计包含 1个、2个、……、n 个元素的子列表的数量。使用 Drop 函数可移除结果列表的第一个元素(因为它对应空子列表的数量)。然后将该函数应用于 π 的前 100,000 位小数。

data1 = Drop[ BinCounts[Length /@ Split[RealDigits[Pi, 10, 1000000][[1]]]], 1];

--我们将结果以表格形式呈现:1 表示某个数字没有在连续位置出现(即单个数字),2 表示相同数字在两个连续位置出现(即重复一次,如 11),依此类推。

TableForm[{Table[i, {i, Length[data1]}], data1}, TableHeadings -> {{"repetitions", "frequency"}, None} ]

--通过添加 Position 函数,我们可以识别特定重复模式出现的位置。例如,要检查序列 {9,9}(即连续两个 9)在 π 的 100 位小数近似值中出现的位置,可输入以下命令:

--为了将子列表位置关联到实际小数位数,我们按以下步骤操作:

--该结果表明,序列 "99" 首次出现在 π 的第 44 位和第 45 位小数,下一次出现在第 79 位和第 80 位小数。我们可以使用下表进行验证。表中将 π 的小数位按每行 10 位进行分组显示。

TableForm[ Partition[First@RealDigits[Pi - 3, 10, 100], 10], TableHeadings -> {Range[10], Range[10]} ]

--SequencePosition 函数可用于定位数字 n连续重复 r次出现的位置。在以下示例中,我们使用 π 的前 10,000,000 位小数,精确查找数字 9 连续出现恰好 7 次的实例。

根据输出结果,在 π的前 10,000,000 位小数中,数字 9 连续出现 7 次的情况发生了 4 次。首次出现起始于第 1,722,777 位(即小数点后第 1,722,776 位),结束于第 1,722,783 位。

我们可能会倾向于认为,只要使用足够多的小数位,任何可能的数字组合,无论其可能性多小,最终都会出现。例如,最近对 π的近似计算表明,存在一个序列其中 0 连续重复了 12 次,数字 1 到 9 也出现了同样长度的连续重复。甚至有一个位置数字 8 连续重复了 13 次。这些出现的频率与离散均匀分布一致:在十进制下,数字 0 连续出现一次、两次或十二次的概率分别为 1/10、1/10^2 和 1/10^12。

这意味着,如果使用一个包含 10^12 位小数的 π近似值,我们极有可能看到一个包含 12 个连续 0 的序列。对于其他序列也可以得出同样的结论。

--在以下示例中,我们在 ππ 的前一千万(10,000,000)位小数中查找模式 "3131313":

这类模式可能引导我们走向博尔赫斯在其著名作品《巴别图书馆》中所提出构想的一个变体。该文本描述了一个包含所有已写就以及未来可能写就的书籍的图书馆(实际上,博尔赫斯提到了书的页数和每页的行数,但这对于我们的论点目的无关紧要)。假设我们可以写一本书,其所有字母都是 a,接着写一本只包含 b的书,依此类推,直到写一本全部由 zz构成的最终之书。通过这种方式,我们将涵盖所有可能的字母组合。由此产生的数字将是巨大的,远超宇宙中的原子数量。然而,它终究是一个有限的数字。

上述故事的一个变体在于用概率取代字母的顺序。假设我们有一个包含 35 个位置的轮盘,代表英语的 26 个字母加上某些符号,如标点符号、空白字符等。如果我们转动这个轮盘足够多次,我们最终将不仅得到每一个可能的单词、句子和段落,还会得到每一本可能的书!唯一的问题将是存储结果所需的时间和空间。我们可以推测,这同样适用于 ππ。例如,如果我们将其以 35 进制表示,并将数字 1 分配给字母 a,数字 2 分配给 b,依此类推,那么在拥有足够多位数的前提下,我们将在其中找到巴别图书馆(这个数字需要多大并不重要,因为 π拥有无限多位小数)。这意味着所有的书籍:过去的、现在的和未来的,都已经被书写完毕,它们就蕴藏在 π的小数位之中。

令人惊讶的是,在当代物理学中,当我们推测平行宇宙的存在时,我们得出了一个可被视为上述推测的极端版本。如果存在无限多个宇宙,那么所有不违背物理定律的可能性都会发生。因此,就在此刻,在某个宇宙中,存在着一个与你完全相同的人,正在做着与你此刻完全相同的事情。根据这个理论,你人生的所有变体都将在不同的宇宙中发生。

新闻动态

热点资讯

推荐资讯