关于第n位小数的计算
各种超越数。

作者:Simon Plouffe

1996年11月30日
2003年3月修订





摘要

我们概述了计算第n位小数(或任何其他基数)的方法
Pi在C*n^3*log(n)^3时间内的位数,内存非常少。这个
计算基于最近发现的Bailey-Borwein-Plouffe
算法和一种新算法的使用
分解成它的组成部分。该算法可用于计算其他
数字,如Zeta(3)、Pi*sqrt(3),Pi^2和2/sqert(5)*log(tau),其中tau
是黄金比例。无需进行计算
计算前面的数字。我们声称该算法具有更多
理论兴趣而非实际兴趣,我们没有更快地发现
算法,也没有证明不存在算法。




使用的Pi公式为

无穷
-----第2个
\n 2(n!)
)----------=Pi+3(1)
/(2 n)!
-----
n=1

*引言
*关键观察和分割算法
*其他数字
*结论
*参考文献



引言

无理数或超越数第n位的计算
人们认为数字要么不可能,要么很难计算
作为数字本身。去年(1995)[BBP],找到了一条新路
计算各种常数(如Pi)的第n个二进制数字
和日志(2)。
然后进行了深入的计算机搜索,以确定
该算法可以用于计算任意
底座。我们在这里提出一种计算第n位小数的方法
通过使用比[BBP]更多的时间来计算Pi(或任何其他基数)
算法,但内存仍然很少。

关键观察和公式

观察到分数1/(a*b)可以分解为
k1/a+k2/b采用a/b的连分式算法。
这里a和b是两个素数幂。这相当于
解k1和k2的丢番图方程总是
如果(a,b)=1,则可以这样做,如果它们没有共同点,请参见[HW]
因素。如果我们有两个以上的基本因子,那么它可能是
通过每次做2,然后使用结果进行组合
使用第三个元素。这样,任意大整数M
可以分割成小的元素。如果我们强加条件
仅具有小因子的M(即最大因子
素数幂大小是计算机字的大小),那么
可以表示任意M。如果这是真的,那么一个数字
已知系列和数字
然后可以进行评估。例如,表达式1/C(2*n,n),
中心二项式满足以下条件:
当n较大时,这个数字很小。

例子:

1/C(100,50)=1/100891344545564193334812497256=

1
-------------------------------------------------------
3 4
2 * 3 *11*13*17*19*29*31*53*59*61*67*71*73*79*83*89*97

现在,如果我们一次取两个元素,并求解简单的
丢番图方程并按此方式进行

1) 1/(a*b)=k1/a+k2/b
2) (k1/a+k2/b)/c=m1/a+m2/b+m3/c
3) 我们继续进行下一个元素。

在每个步骤中,常数k1和k2由以下简单公式确定
将a/b展开为连分数并保留“before”
最后一个‘continuant’,后面的m1、m2和m3被确定为相同
方式。做完那个数字后,我们很快就得出了
(模1)为相同数字但表示为
只有几个小分数的总和。

所以,1/100891344545564193334812497256=

-3/8-61/81-1/11-11/13-4/17-9/19-25/29-26/31+
23/53 + 41/59 + 29/61 + 37/67 + 33/71 + 19/73 + 36/79 + 7/83
+ 13/89 + 88/97

计算这个表达式所用的时间是log(n)*n^2,log(n)
是使用欧几里得算法进行计算所花费的时间
在每个数字上。我们没有考虑花费在
找到表达式中的下一个素数只是因为
我们可以考虑(至少对于
矩)算法的适用性为数千
数字,所以计算素数的时间真的很重要
在整个过程中在该范围内的几秒钟。自从我们
提前知道最大素数是多少
C(2*n,n),那么我们可以用贪婪算法来实现它
直到我们达到2*n,
这可以在不计算实际数字的情况下完成
这显然不适合放在一个小空间里。可以是
循环的一部分,而不必存储除
电流n。对于二项式(2*n,n)中的任何p,最大值
指数是(正如罗伯特·伊斯雷尔指出的)。

2个
-----
\/2牛顿\
) | [---] - [---]|
/|千|
-----\p p/
k=1

等价地,对于p=2,它给出二进制中“1”的数字
n的展开式,对于p=3,还有另一条线索
扩展模式“12”的数量和次数
出现。现在看总和(1/C(2*n,n),n=1..无穷大),我们
可以说这个序列本质上是Pi*sqrt(3),因为它不同
只有4/9*Pi*sqrt(3)+1/3,因为这是2个小定量
我们可以使用BBP算法将计算进行到任意
位置几乎没有时间。仅具有n/C(2*n,n)而非(1)
简化了流程。


为了计算每个项的最终结果,我们只需要很少的内存
元素,



*到目前为止,部分总和为1。(稍后评估
使用BBP算法)。
*4表示电流分数k1/a和k2/b。
*下一个待评估元素为:1/c。
*1代表n本身。

因此,只要8个内存元素,每个学期的总和
(1)可以在不必存储任何数字的情况下执行
在日志(n)时间中大于一个计算机字,将其添加到
(1)的每个元素的总成本是n^3*log(n)。

接下来我们必须考虑的是,如果我们有一个
任意大的M,如果M只有小的因子,则1/M
可以计算。首先,我们需要将1/M表示为
求和(a(i)/p(i)**(j),i=1..k),其中p(i)^(j)是素数
幂和a(i)小于p(i)^(j)。

如果我们有2^n/M,那么使用二进制方法
用(2)表示1/M的元素是可能的
单位为log(n)时间。同样,如果我们不想存储元素
在内存中,我们可以像计算
每个步骤的第一部分。在这个算法中,我们可以
存储2的幂以执行二进制方法或不执行二进制方法。那里
有多种方法可以做到这一点,我们参考[Knuth vol.2]
解释。

这一步很重要,主要是在我们能够代表
1/(a*b)将其拆分,然后再乘以2^n,只需相加
每个元素的log(n)步骤,可以任意执行
因为我们有每个元素的实际分数
(2). 它只推送小数(或
选择的基础)。任何时候只有一个元素
1/M的膨胀考虑了电流分数,
同样的分数可以随时以10为基数表示
如果我们想在这一点上进行十进制扩展。出于这个原因
将当前分数乘以2^n只需要很小的值
数字和分数。

完成后,总成本变为n^3*log(n)^2。这个
成本用于计算

无穷
-----n个
\ 2
) ----------- (2)
/n C(2 n,n)
-----
n=1

其中C(2*n,n)是中心二项式系数。如果我们愿意
在每一步计算(最后的第n位)时,我们需要
记录(n)步骤。可以在
提前,在BBP中,可以在基数2中进行计算,但是
这里我们有独立的实际显式分数
底座的厚度。这是我们实际计算小数的地方
过程最后部分的扩展。
因此,最终可以计算Pi的第n位
C*n**3*log(n)**3个步骤。

其他数字

通过查看与
(1) 或者(3)我们看到[PIagm]、[RamI和IV]的数字
Pi*sqrt(3)Pi、Pi**3、Zeta(3)甚至Pi的幂都可以是
也进行了计算。我们需要满足的条件是:
如果一个级数的任何一项可以分解为
大小不大于计算机字的大小,则它是一部分
那一类的。这包括以下类型的系列:

无穷
-----n个
\c(c)
) --------------- (3)
/第页
-----P(n)C(m n,n)
n=1

其中c是整数,P(n)是多项式,c(mn,n)是近似值
中心二项系数。此类序列包含
许多尚未确定的已知数字
常数,反之则是类似的已知常数
像泽塔(5)这样的大自然尚未被确认为成员
在班上。将序列识别为
用已知常数表示,精确的相反
过程是逆变器[Inv]试图做的。

数字e或exp(1)是和(1/n!,n=0..无穷大)
不满足我们的条件,因为1/n!最终包含
2的高次幂,因此无法计算到第n位
使用我们的算法。
1/n!的因式分解!具有小素数的高幂,
高度2*k和k几乎等于n的大小
只有极少数已知和出现的序列
只是第一个的变种。

其他像伽马或加泰罗尼亚人似乎没有合适的系列
使用Bailey的PSLQ或LLL进行表示和计算机搜索
MapleV和Pari-Gp对此没有给出答案。代数数,如
sqrt(2)还没有得到充分的研究,我们仍然在做
不知道这些是否属于这一类。



结论


有很多,但首先,我们无法抗拒思考
威廉·尚克斯(William Shanks),他在1853年手工计算了Pi——如果他
如果他知道这个算法,他肯定会尝试它
之前他花了20年的时间计算Pi(其中一半是因为一个错误)。
其次,这里显示的算法是理论性的,不实用。
我们不知道是否有改进的方法,如果有,那就是
有理由认为它可以用来检查长时间的计算
就像去年Kanada Yasumasa进行的计算一样
Pi到12410亿位数。可能有办法
加快算法速度,使其成为高效算法。
第三,到目前为止,有两类数字可以计算到
第n位:
1) [BBP]算法中的SC(2)类,包括
多对数。
2) 这类新的数字。接下来是什么?,到目前为止我们还不知道
例如,广义项为H(n)/2**n的级数
是n次谐波数)属于第一类的,可以是
扩展。我们认为,这种新方法只是冰山一角。
最后,有趣的是,我们可以将Pi计算为
第10000位,无需(几乎)存储任何数组或矩阵,因此它
可以使用小型袖珍计算器进行计算。我们还注意到,在一些
我们有一种方法可以在不使用内存的情况下产生圆周率的数字,这意味着
如果我们考虑使用
生成数千位数字的算法。我们认为
其他数字尚未公布,有可能(?)
自然发生的第n位(以任何基数)的直接公式
常数,如log(2)。

致谢

我们要感谢Robert Israel(不列颠哥伦比亚大学)和David H。
Bailey[NASA]感谢他们的宝贵意见。

参考文献

*David H.Bailey、Peter B.Borwein和Simon Plouffe,《快速计算》
各种多对数常数,1997年4月,《计算数学》。
*Bruce C.Berndt,Ramanujan笔记本卷。纽约州斯普林格-弗拉格市,I至IV。
*Pi和AGM,作者:Jonathan M.Borwein和Peter B.Borwein
解析数理论和计算复杂性,威利,纽约,1987年。
*David H.Bailey和Simon Plouffe,《识别数值常量》,预印本1995年。
*不列颠哥伦比亚大学罗伯特·伊斯雷尔,个人交流。
*M.Abramowitz和I.Stegun,《数学函数手册》,多佛,纽约,1964年。
*G.H.Hardy和E.M.Wright,数字理论导论5e,
牛津大学出版社,1979年。
*W.Shanks,对数学的贡献,主要包括纠正
1853年,伦敦G.贝尔,从圆圈到607个小数点。
*D.E.Knuth,《计算机编程的艺术》,第2卷:半数值算法,
艾迪森·韦斯利,马萨诸塞州雷丁市,1981年。
*普劳夫逆变器http://pi.lacim.uqam.ca/eng


关键词:Pi,复杂性,算法,n’t数字计算,普劳夫反相器。