如何用pascal计算圆周率率?

圆周率是怎样算出来的
前面,在“圆周率的故事”一文中曾经谈到,我国古代在圆周率的计算方面所做出的巨大贡献。
早在2000多年前的西汉初年,在我国最古老的数学著作《周髀算经》里,就已经有了“周三径一”的记载。西汉末年,刘歆提出把圆周率定为3.1547。到了东汉,张衡提出把圆周率定为3.1622。但是,这两种建议都因为缺乏科学依据而很少有人采用。一直到了公元263年,三国时期魏国的刘徽创立了“割圆术”,才使圆周率的计算走上了科学的道路。
那么,什么是割圆术呢?原来,刘徽在整理我国古老的数学著作《九章算术》时发现,所谓“周三径一”,实质上,是把圆的内接正6边形的周长作为圆的周长的结果。
请看下图:
    &&&&&&&&&
  当直径为1时,半径是0.5,圆的内接正6边形的边长等于半径,也是0.5,边长是3。所以,如果“把圆的内接正6边形的周长作为圆的周长”,圆周长就是3。
于是他想到:如果用圆的内接正12边形、24边形、48边形、96边形……的周长作为圆的周长,岂不是更加精确。这就是“割圆术”。用他自己的话说就是:“割之弥细,所失弥少,割之又割,以至于不可割,则与圆周合体而无所失矣。”但是,因为计算过程随着边数的增加越来越复杂,限于当时的条件,刘徽只计算到圆的内接正96边形,使圆周率精确到两位小数,得到3.14。后来,刘徽又算到圆的内接正3072边形,使圆周率精确到四位小数,得到3.1416,这在当时已经称得上相当精确了。
又过了大约200年,到了南朝的时候,祖冲之更是把“割圆术”推进到圆的内接12288边形,算出圆周率应该在3.1415926到3.1415927之间,开创了一项世界纪录,比欧洲早了一千多年。这是我们中华民族引以为荣的骄傲!
  现在,就让我们来亲身感受一下,用割圆术计算圆周率的过程:
按照割圆术,在已知圆的内接正6边形的基础上,计算正12边形、24边形、48边形、96边形……的周长,需要解决一个问题:知道了正n边形的边长an,怎样求正2n边形的边长a2n。
请看下图:
          
图中OA=OB=OC=R,AB=an,AC=a2n,AD=DB=an/2。
  现在就让我们来当一回21世纪的刘徽,用计算器分别求出上面正多边形的边长,再算出周长,也就是圆周率的值。
  随着数学的发展,人们又陆续发明了另外一些计算圆周率的方法。
1650年英国数学家瓦里斯发现:
  不久,英国皇家学会主席布龙克尔发现:
1673年德国大数学家莱布尼茨发现:
  等等。
现在更是有了一些专门用来计算圆周率的电脑程序,不过,用这类方法计算圆周率,已经变成一种枯燥乏味的机械操作,再也体会不到探索的乐趣和艰辛了。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。圆周率怎么算?我知道圆周率是个无限不循环小数(3.1415926... .)可就怎么算呢?到底是几除以几,还是...谁知道
告诉我一声_百度作业帮
圆周率怎么算?我知道圆周率是个无限不循环小数(3.1415926... .)可就怎么算呢?到底是几除以几,还是...谁知道
告诉我一声
圆周率怎么算?我知道圆周率是个无限不循环小数(3.1415926... .)可就怎么算呢?到底是几除以几,还是...谁知道
告诉我一声
他算出的 π 的8位可靠数字,不但在当时是最精密的圆周率,而且保持世界记录九百多年.以致于有数学史家提议将这一结果命名为“祖率”.这一结果是如何获得的呢?追根溯源,正是基于对刘徽割圆术的继承与发展,祖冲之才能得到这一非凡的成果.因而当我们称颂祖冲之的功绩时,不要忘记他的成就的取得是因为他站在数学伟人刘徽的肩膀上的缘故.后人曾推算若要单纯地通过计算圆内接多边形边长的话,得到这一结果,需要算到圆内接正12288边形,才能得到这样精确度的值.祖冲之是否还使用了其它的巧妙办法来简化计算呢?这已经不得而知,因为记载其研究成果的著作《缀术》早已失传了.这在中国数学发展史上是一件极令人痛惜的事.中国发行的祖冲之纪念邮票 祖冲之的这一研究成果享有世界声誉:巴黎“发现宫”科学博物馆的墙壁上著文介绍了祖冲之求得的圆周率,莫斯科大学礼堂的走廊上镶嵌有祖冲之的大理石塑像,月球上有以祖冲之命名的环形山…… 对于祖冲之的关于圆周率的第二点贡献,即他选用两个简单的分数尤其是用密率来近似地表示 π 这一点,通常人们不会太注意.然而,实际上,后者在数学上有更重要的意义.
自己画个圆,在里面画正多边形,人后用正多边形的周长除以它的直径,这样一直算下去,就能接近圆周率的值了......
圆周率是一个极其驰名的数。从有文字记载的历史开始,这个数就引进了外行人和学者们的兴趣。作为一个非常重要的常数,圆周率最早是出于解决有关圆的计算问题。仅凭这一点,求出它的尽量准确的近似值,就是一个极其迫切的问题了。事实也是如此,几千年来作为数学家们的奋斗目标,古今中外一代一代的数学家为此献出了自己的智慧和劳动。回顾历史,人类对 π 的认识过程,反映了数学和计算技术发展情形的一个侧面。 π 的研究,在...利用单位圆与边长为1的正方形面积之比来计算
π的近似值具体思想如下:
如图1所示,单位圆的1/4为一个扇形G,它是边长为1
的正方形的一部分.考虑扇形面积在正方形面积中所占的比例k,
得出其结果为π/4,然后乘以4就可以得到π的值.这里如何计算比例
k,运用蒙特卡罗方法的随机投点思想.在正方形中随机投入很多点,
使所投点落图1在正方形中每一个位置的机会均等,
然后考察有多少点落在扇形内.其中落在扇形内的点的个数
m与投点总数n之比就是k的近似值.
于是通过java可以完成相应的程序编写.
详细的程序如下.
public class MontePi {
&& &public static void main(String[] args) {
&& &&& &double x,y=0;
&& &&& &long n=0,i=0;
&& &&& &for(i=0;i&;i++){
&& &&& &&& &x= Math.random()*(1-0)+0; //产生0-1的随机数
&& &&& &&& &y=Math.random();
&& &&& &&& &if(x*x+y*y&1) n++;
&& &&& &&& &
&& &&& &System.out.println(i+&:&+n);
&& &&& &double pi=4*(double)n/(double)i;
&& &&& &System.out.println(pi);
可能的输出结果为:
ps:蒙特卡罗分析计算圆周率并不是好方法,显然达不到公元5世纪祖冲之的推算精度。但是在其他领域有独特作用,比如:项目管理里面的风险分析。
蒙特卡罗方法实现了两大优点:
一是简单,省却了繁复的数学推导和演算过程,使得一般人也能够理解和掌握
二是快速。简单和快速,是蒙特卡罗方法在现代项目管理中获得应用的技术基础。
蒙特卡罗分析由于概率计算是相对独立互不影响的,所以很容易发展成大规模并行计算的算法。下面是一个多线程计算圆周率的版本:
import java.util.ArrayL
import java.util.H
import java.util.R
public class ThreadMontePi implements Runnable {
&& &static ArrayList&Hashtable&String, Long&& array1=new ArrayList&Hashtable&String, Long&&() ; //保存结果数据
&& &private S
&& &public void setName(int threadnum) {
&& &&& &this.name = threadnum + &&;
&& &&& &this.threadnum =
&& &public void run() {
&& &&& &long randSeed = System.currentTimeMillis() - threadnum * 10; // 按时间取随机数种子
&& &&& &//System.out.println(randSeed); //显示随机数种子
&& &&& &Random rand = new Random(randSeed);
&& &&& &double x, y = 0;
&& &&& &long n = 0, i = 0;
&& &&& &for (i = 0; i & ; i++) {
&& &&& &&& &x = (double) rand.nextInt(); // 产生0-的随机整数,不包含
&& &&& &&& &x = x / d;
&& &&& &&& &// x= Math.random()*(1-0)+0; //产生0-1的随机数,不包含1
&& &&& &&& &// y=Math.random();
&& &&& &&& &y = (double) rand.nextInt(); // 产生0-的随机整数,不包含
&& &&& &&& &y = y / d;
&& &&& &&& &if (x * x + y * y & 1)
&& &&& &&& &&& &n++;
&& &&& &&& &// System.out.println(y);
&& &&& &System.out.println(name + &:& + i + &:& + n);
&& &&& &Hashtable&String, Long& tabt=new Hashtable&String, Long&();
&& &&& &tabt.put(&i&, i);
&& &&& &tabt.put(&n&, n);
&& &&& &array1.set(threadnum, tabt);
&& &&& &double pi = 4 * (double) n / (double)
&& &&& &System.out.println(name + &:& + pi);
&& &&& &// System.out.println(&hello & + name);
&& &public static void main(String[] args) {
&& &&& &//初始化array1
&& &&& &array1.add(new Hashtable());
&& &&& &array1.add(new Hashtable());
&& &&& &array1.add(new Hashtable());
&& &&& &array1.add(new Hashtable());
&& &&& &//启动3个线程计算
&& &&& &ThreadMontePi myThread1 = new ThreadMontePi();
&& &&& &ThreadMontePi myThread2 = new ThreadMontePi();
&& &&& &ThreadMontePi myThread3 = new ThreadMontePi();
&& &&& &myThread1.setName(1);
&& &&& &Thread thread = new Thread(myThread1);
&& &&& &thread.start();
&& &&& &myThread2.setName(2);
&& &&& &Thread thread2 = new Thread(myThread2);
&& &&& &thread2.start();
&& &&& &myThread3.setName(3);
&& &&& &Thread thread3 = new Thread(myThread3);
&& &&& &thread3.start();
&& &&& &//判断线程结束,收集计算结果
&& &&& &boolean flag =
&& &&& &while (flag) {
&& &&& &&& &Thread.State state = thread.getState();
&& &&& &&& &Thread.State state2 = thread2.getState();
&& &&& &&& &Thread.State state3 = thread3.getState();
&& &&& &&& &if (java.lang.Thread.State.TERMINATED == state
&& &&& &&& &&& &&& &&& java.lang.Thread.State.TERMINATED == state2
&& &&& &&& &&& &&& &&& java.lang.Thread.State.TERMINATED == state3)
&& &&& &&& &&& &
&& &&& &Hashtable&String, Long& tabt=(Hashtable&String, Long&)array1.get(1);
&& &&& &System.out.println(&thread1:&+tabt.get(&i&)+&,&+tabt.get(&n&));
&& &&& &Hashtable&String, Long& tabt2=(Hashtable&String, Long&)array1.get(2);
&& &&& &System.out.println(&thread2:&+tabt2.get(&i&)+&,&+tabt2.get(&n&));
&& &&& &Hashtable&String, Long& tabt3=(Hashtable&String, Long&)array1.get(3);
&& &&& &System.out.println(&thread3:&+tabt3.get(&i&)+&,&+tabt3.get(&n&));
&& &&& &long sumI=tabt.get(&i&)+tabt2.get(&i&)+tabt3.get(&i&);
&& &&& &long sumN=tabt.get(&n&)+tabt2.get(&n&)+tabt3.get(&n&);
&& &&& &double pi = 4 * (double) sumN / (double) sumI;
&& &&& &System.out.println(&sumPi:&+pi);&& &//输出最终计算结果
可能的输出结果为:
1:3.1416224
thread1:540560
thread2:545069
thread3:536096
sumPi:3.141623
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:108451次
积分:1742
积分:1742
排名:第12231名
原创:66篇
评论:18条
(1)(1)(1)(2)(2)(5)(1)(2)(6)(5)(4)(2)(1)(1)(1)(1)(4)(1)(1)(1)(1)(1)(6)(2)(2)(2)(1)(2)(1)(1)(4)(3)(1)圆周率是怎样算出的?_百度作业帮
圆周率是怎样算出的?
圆周率是怎样算出的?
纠正一下,圆周率并不是祖冲之发现的,他之前,刘徽就就计算过圆周率. 作为数学家,研究计算圆周率应该是他们的专业方向之一. 我国古代数学家对圆周率方面的研究工作,成绩是突出的.早在三国时期,著名数学家刘徽就用割圆术将圆周率精确到小数点后3位,南北朝时期的祖冲之在刘徽研究的基础上,将圆周率精确到了小数点后7位,这一成就比欧洲人要早一千多年. 祖冲之是和他儿子一起从事这项研究工作的,当时条件很差.他们在一间大屋的地上画了一个直径1丈的大圆.从内接正6边形开始计算,12边形,24边形,48边形的翻翻,一直算到96边形,计算的结果和刘徽的一样.接着,内接边数再逐次翻翻,边数每翻一次,要进行7次加减运算,2次乘方,2次开方,运算的数字都很大,很复杂,在当时的条件下,是十分困难的.祖冲之父子一直把边形算到24576边,得出了圆周率在3··1415927之间,精确到了小数点后7位.其近似分数是 355/113,被称为"密率".德国数学家奥托在1573年重新得出这个近似分数.当时,欧洲人还不知道在一千多年之前祖冲之就己经算出来了.后来荷兰人安托尼兹也算出这个近似分数,于是欧洲人就把这个称为"密率"的近似分数叫着"安托尼兹率".日本数学家认为应该恢复其本来面目,肯定祖冲之在圆周率方面研究的贡献,改称"祖率"才对. 参考资料:/ZHJW/kjzg/4.htm怎么用VB计算圆周率?把步骤和公式写清楚_百度作业帮
怎么用VB计算圆周率?把步骤和公式写清楚
怎么用VB计算圆周率?把步骤和公式写清楚
Private Sub Command1_Click()Dim sum As Double, t As Doublesum = 0: t = 1Dosum = sum + (-1) ^ (t + 1) / (2 * t - 1)t = t + 1Loop Until Abs((-1) ^ (t + 1) / (2 * t - 1)) < 10 ^ (-6)Magbox 4 * sumEnd Sub其中10^(-6)是计算精度,你可以调整,-6改成-8,精度就可增加,不过计算时间较长.

我要回帖

更多关于 用pascal计算圆周率 的文章

 

随机推荐