关于圆周率大家再熟悉不过了:

我们从课本上学习到早在一千多年前,祖冲之将圆周率计算到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,系统运行64 位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.141592653589793238462643383279…

如果i<10000,得到pi = 3.1416926635905345 (从红色部分以后不精确了)

如果i<1000000 ,得到pi = 3.1415936535907742 (从红色部分以后不精确了)

如果i<1000000000 ,得到pi = 3.1415926525880504 (从红色部分以后不精确了)

……

可以看到,当迭代的轮数越大,求出的π值越精确。

由于是无限累加,我们可以很容易改成并行程序求解,比如i=4n,可以分成4 段并行求解,

再将4 部分和合并起来得到最终π值。假设我们有4 台计算机,并行计算设计如下:

我们这里通过fourinone 提供的各种并行计算模式去设计,第一次使用可以参考分布式计算

上手demo 指南,开发包下载地址:/p/fourinone/

程序实现:

PiWorker:是一个π计算工人实现,我们可以看到它通过命令行输入一个计算π值的起始值

和结束值,我们同时启动4 个PiWorker 实例,启动时指定不同的起始结束参数。

PiCtor:是一个π计算包工头实现,它的实现很简单,获取到线上工人后,通过doTaskBatch

进行阶段计算,等待每个工人计算完成后,将各工人返回的π计算结果合并累加。

运行步骤:

1、启动ParkSer

并行计算求pi值C语言,使用并行计算求圆周率π.pdf相关推荐

  1. matlab中用公式求pi值,matlab用π 4公式求π的近似值,直到某一项的绝对值小于10-6为止...

    求问matlab计算的几个公式以及方法. 峰值max峭度应该就是梯度了gradient曲线画图:plot(二维)plot3(三维),其他画图都用这个就够了查matlab文档 求matlab高手,这个公 ...

  2. 第一个Spark实例:求PI值

    向spark提交jar,需要使用 bin下的spark-submit [hadoop@nbdo1 bin]$ ./spark-submit --help Usage: spark-submit [op ...

  3. 看得见的算法蒙特卡洛问题——使用蒙特卡洛算法求PI值

    看得见的算法蒙特卡洛问题--使用蒙特卡洛算法求PI值 1.什么是蒙特卡洛问题 蒙特卡洛方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算 ...

  4. Matlab--蒙特卡洛方法求pi值

    Matlab--蒙特卡洛方法求pi值 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论 ...

  5. matlab求pi值的三种方法

    https://www.icourse163.org/learn/CSU-1002475002?tid=1450231442#/learn/content?type=detail&id=121 ...

  6. 高精度计算PI值 C语言 思路,高精度计算pi

    高精度计算PI值 题目描述 ​    使用双向链表作为存储结构,请根据用户输入的一个整数(该整数表示精确到小数点后的位数,可能要求精确到小数点后 500 位),高精度计算PI值.提示:可以利用反三角函 ...

  7. 高精度计算PI值 C语言 思路,高精度计算PI值

    高精度计算PI值 高精度计算PI值 所用公式: #include #include typedef struct list{ int data; struct list *next; struct l ...

  8. c语言编程实现表达式求值,c语言实现表达式求值的方法

    c语言实现表达式求值的方法 发布时间:2020-06-22 16:45:46 来源:亿速云 阅读:82 作者:Leah 这期内容当中小编将会给大家带来有关c语言实现表达式求值的方法,以专业的角度为大家 ...

  9. Java循环案例-求PI值

    30天! 题目一: PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17- 1.这个算式的结果会无限接近于圆周率的值,我国古代数学家祖冲之计算出,圆周率在3.14159 ...

  10. 蒙特卡洛法求概率密度函数matlab,matlab的蒙特卡洛算法-----用概率算法求pi值

    问题补充: 能提供一个例子看看吗?我就不懂MATLAB,想知道具体代码.因为现在写论文急,也没时间仔细看书了 蒙特卡罗模拟 就是随机数相关的东西,你只要知道随机数是怎么得到.其它的事就要好办了. ra ...

最新文章

  1. doc python 颜色_Python wordcloud.ImageColorGenerator方法代码示例
  2. snabbdom源码解析(七) 事件处理
  3. php和openresty效率,openresty say_hello 性能测试
  4. 目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
  5. 谈谈我对MVC的View层实现的理解
  6. jstl处理栏目与子栏目_Detelogy智能前处理设备微展厅P2:再添新品
  7. 正则表达式 任意数字_作为运维还不会正则表达式?赶快看这篇学习一下
  8. 教你精确编写高质量高性能的MySQL语法
  9. 台式计算机技术方案,2017年4月自考02316计算机应用技术真题及答案
  10. 【OpenCV 例程200篇】38. 图像的反色变换(图像反转)
  11. 学习笔记整理之小实现
  12. PHP全栈学习笔记3
  13. 参数估计(一)--置信区间
  14. Maven图文闪电入门
  15. 按键精灵修改html内容,按键精灵将表格录入网页.doc
  16. 算法导论(第三版)第一章习题答案
  17. Win7系统自动关机设定让你更轻松
  18. mscorsvw.exe占内存解决方案
  19. PS新手教程,教你打造一个炫酷的冰冻字效_桂桂博客
  20. apache ii评分怎么评_APACHE II评分表

热门文章

  1. 再也不用手动复制粘贴收集Taptap游戏评论了,还可以制作好看的热词词云图~
  2. 华为云服务的使用方法详解--以照片备份与恢复为例
  3. 简单python教程视频_学习Python其实超简单:只需要看这套视频,即可轻松从入门到精通...
  4. dfasdfad大发
  5. 每日打卡:等式方程的可满足性
  6. 写switch case语句不加break会怎样。
  7. Hero image网站转化这么高?21个最佳案例给你参考
  8. linux窗口按钮,在KDE Linux中配置窗口装饰按钮 | MOS86
  9. 微信企业号 sdk java_基于Java spring框架的微信企业号开发中关于js-sdk的配置
  10. 2020年淘宝直播数据分析报告