搜索

如何利用GPU或者hadoop 集群来 计算圆周率

发布网友 发布时间:2022-04-20 08:05

我来回答

1个回答

热心网友 时间:2023-10-01 03:13

关于圆周率大家再熟悉 不过了: 我们从课本上学习到早在一千 多年前,祖冲之将圆周率计算到3.1415926到3.1415927之间…计算机诞生后,计算圆周率被用来检测计算机的硬件性能,昼夜燃烧cpu看会不会出问题…另外一些人也想看看这个无限延伸的神秘数字背后是否有规律,能发现一些宇宙的秘密…

提起圆周率,不能不提及Fabrice Bellard,他被 认为是一位计算机天才,在业界有着重要的影响。1996年他编写了一个简洁 但是完整的C编译器和一个Java虚拟机Harissa。Fabrice Bellard发明的TinyCC是GNU/Linux环境下最小的ANSI C语言编译器,是目前号称编译速度最快的C编译器。Fabrice Bellard杰作 众多且涉及广泛,1998年编写了一个简洁的OpenGL实现TinyGL,2003年开发了Emacs克隆QEmacs,2005年还设计了一个廉价的数字电视系统。

Fabrice Bellard使用一台普通的台式电脑,完成了冲击由超级计算机保持的圆周率运算记录的壮举,他使用台式机将圆周率计算到了小数点后2.7万亿位,超过了由目前排名世界第47位的T2K Open超级计算机于去年8月份创造的小数点后2.5万亿位的记录。

Bellard使用的电脑是一台基于2.93GHz Core i7处理器的电脑,这部电脑的内存容量是6GB,硬盘则使用的是五块RAID-0配置的1.5TB容量的希捷7200.11,系统运行位Red Hat Fedora 10操作系统,文件系统则使用Linux的ext4.

这次计算出来的圆周率数据占去了1137GB的硬盘容量,Bellard花了103天的时间计算出了这样的结果。

计算圆周率的方法有很多种:
微积分割圆法求:

或者利用便于计算机计算的丘德诺夫斯基公式法求:

不过这些计算方法都比较 复杂,难以让读者理解和使用并行计算来求,所幸数学上的泰勒级数是个好东西,它将微积分的东西改成用无限级数来表示,这样很容易进行并行计算分解:

π=4*∑(-1)^n+1/(2n-1) 或者写为: π=4*( 1-1/3+1/5-1/7+…)
也可以得到:πn =πn-1+(-1)^n+1/(2n-1),也就是可以通过迭代 前面的π值去求当前π值。

我们根据上面公式先写个单机程序来求:

public class PiTest{ public static void main(String[] args) { double pi=0.0; for(double i=1.0;i<1000000001d;i++){ pi += Math.pow(-1,i+1)/(2*i-1); } System.out.println(4*pi); }}

运行以上程序,并对照pi的标准值:3.14159265357932384623383279…
如果i<10000,得到pi = 3.1416926635905345 (从红色部分以后不精确了)
如果i<1000000,得到pi = 3.1415936535907742 (从红色部分以后不精确了)
如果i<1000000000,得到pi = 3.1415926525880504(从红色部分以后不精确了)
……
可以看到,当迭代的轮数越大,求出的π值越精确。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top