龙空技术网

圆周率用电脑有几种算法?

王珂 13540

前言:

现在姐妹们对“c语言高精度计算pi”大体比较关切,我们都需要知道一些“c语言高精度计算pi”的相关知识。那么小编在网上网罗了一些有关“c语言高精度计算pi””的相关知识,希望大家能喜欢,同学们快快来学习一下吧!

一说起圆周率π,很多人就想到祖冲之老爷子的割圆术。

说实话,祖大人也挺无奈的,从我们小学就开始割圆,一直割到大学还在割。

但割圆术只适合手算,如何用电脑算π呢?

泰勒展开

泰勒展开在科学计算中简直有着匪夷所思的变态威力。

之前我有一篇文章泰勒为何要展开? 泰勒公式有什么神奇作用?介绍了什么是泰勒展开,它可以把复杂函数转换成加减乘除,比如sinx:

之所以要展开,是因为通用计算机本质上只能计算加减乘除。

用泰勒展开计算π

首先想到的思路就是,反三角函数,根据定义有:

那么,接下来的问题就是,

如何计算arctan(1)

有人说,直接调用C语言库函数atan(double,double)不就行了。

确实,这可以完成计算,然而,这是一种令人不齿的开挂行为,就好像我问怎么跑完马拉松,你说你开车一溜烟就跑完了一样。

库函数是别人写好的,我们现在是思索如何实现计算,而不是考虑如何调用。

至此,我们只好请出祖传配方,把arctan(x)进行泰勒展开:

然后,令x = 1,得到:

格雷戈里-莱布尼茨公式

它被称为莱布尼茨级数,也被称为格雷戈里-莱布尼茨级数,用以纪念莱布尼茨同时代的天文学家兼数学家詹姆斯·格雷戈里。

看起来很吊是不是······

但是啊但是,还不够吊,因为问题还没完:

这个级数收敛极慢。

比如,算到+4/9,也就是前五项,结果仅为3.3396,误差有0.2之多。

它要到算500000项之后,才会精确到小数点后五位:

就算电脑也算得太累了。

何况莱布尼兹(1646年7月1日-1716年11月14日)当年是没有电脑的!

加快收敛

于是,人们尝试改进,希望能快点计算。

英国数学家梅钦在1706年用上面的级数,发掘了一个可以快速收敛的公式:

配合上面arctan(x)泰勒展开,梅钦依据此公式(没有电脑),把圆周率计算到小数点后一百多位。

英国数学家威廉·谢克斯花15年的时间以此计算到小数点后707位,不过在第528位时出错,因此后面的都不正确了。

微微杯具就是了。

神奇公式

现代有了电脑,我们希望更快的收敛速度,因此科学家在寻找新的级数。

历史总是留给吊人的,也总是会生产一些吊人的。

比如:

拉马努金公式

这玩意被称为拉马努金公式,是印度科学家拉马努金发明的。

第一位用拉马努金公式计算π并取得进展的是比尔·高斯珀,他在1985年计算了小数点后一千七百万位。

收敛再快一点?还有楚德诺夫斯基公式:

楚德诺夫斯基公式

楚德诺夫斯基兄弟于1989年算得π小数点后10亿(10⁹)位,法布里斯·贝拉于2009年算得2.7千亿(2.7×10¹²)位,亚历山大·易和近藤滋在2011年算得一万亿(10¹³)位。

意不意外,惊不惊喜,

无不无聊······

标签: #c语言高精度计算pi