vb编程 算圆周率

vb编程 算圆周率,第1张

圆周率π,在vb

编程中,你用健盘是输入不到这个值的,你得用一个常数来定义它的值,如计算圆的体积v=4/3πrrr,且设r为2,可以用下面的程序代码来编写:

(方法一):let

p=3141592

let

r=2

let

v=4/3prrr

print

v

end

(方法二):const

p=3141592

let

r=2

let

v=4/3pr^3

print

v

end

说明:第二个是利用符号常量来代表∏,也就是用函数const定义了p的值,p的值变成了常量,此时在程序中不允许再赋新值

周率是数学上常用到的一个值,约等于3142592625

(一) 公元前利用正多边形计算

公元前1650年,埃及人著的兰德纸草书中提出=(4/3) 3=31604。但是对的第一次科学的尝试应归功于阿基米德。 阿基米德计算值是采用内接和外切正多边形的方法。数学上一般把它称为计算机的古典方法。

在公元前3世纪,古希腊的数学非常发达,为了使得数学计算简便,人们选一个以长度为直径的圆。这样圆的周长在任何内接正多边形的周长和任何外切正多边形的周长之间。这样就容易得到的上下界,因为计算内接和外切正多边形的财长比较简单。阿基米德也掌握了这一原理,他从内接和外切严六边形开始,按照这个方法逐次进行下去,就得出12、24、38、96边的内拉和外切正多边形的财长,他利用这一方法最后得到值在223/71,22/7之间,取值为314。这一方法和数值发表在他的论文集《圆的量度》中。

我国古代第一个把求圆周率近似值的方法提高到理论高度上来认识的是刘微。他独立地创造了" 割圆术" ,并系统而严密地用内接正多边形来求得圆周率的近似值,他从内接正六边形算起,计算到圆内接正192边形的面积,从而得出3141024<<3142704这一值,后来他沿着这一思路继续前进,一直算到圆内接正3072边形时,得到了=3927/1250,的值为

314159。这是当时得到的最精确的取值。 南北朝时期,我国的大数学家祖冲之采用刘徽的割圆术,一直算到圆内接正24576边形,从而推得: 31415926<<31415927 这一成果记载在他的著作《缀术》中。可惜的是,这本书已经失传。为了应用方便,祖冲之对圆周率还给出了两个分数值355/113和22/7,前者称之为" 密率" ,后者称之为" 给率" 。其中" 密率"355/133是一个很有趣的数字,分母分子恰好是三个最小奇数的重复,既整齐美观、又便于记忆。355/113=3+4 2/(7 2+8 2) 也是很巧妙的组合。它与的实际值相对误差只有000000009 。

(二)连分数计算

用连分数计算的人不多,要多次展开。首创连分数的是一个叫盖托蒂的数学家。布朗开罗(1620-1684)得到的表达式为

这个式子源于下式

在一定范围内计算上式,先采用繁分数形式。

再计算

再由

可得

因为在展开式中取的项数有限,所以值没有超过3。

由上可见,计算量很大,是古人对计算感兴趣吗?对现在的年轻人来讲,这是枯燥无味的,古人也许因为娱乐或兴趣而高兴这么干下去。

(三)一些计算圆周率的经典的常用公式

1、1593年,韦达给出

这一不寻常的公式是的最早分析表达式。甚至在今天,这个公式的优美也会令我们赞叹不已。它表明仅仅借助数字2,通过一系列的加、乘、除和开平方就可算出 值。

2、沃利斯1650年给出:

3、Machin 公式

这个公式由英国天文学教授John Machin于1706年发现。他利用这个公式计算到了100位的圆周率。Machin 公式每计算一项可以得到14位的十进制精度。因为它的计算过程中被乘数和被除数都不大于长整数,所以可以很容易地在计算机上编程实现。

还有很多类似于Machin 公式的反正切公式。在所有这些公式中,Machin 公式似乎是最快的了。虽然如此,如果要计算更多的位数,比如几千万位,Machin 公式就力不从心了。

4、Ramanujan 公式

下面介绍的算法,在PC 机上计算大约一天时间,就可以得到圆周率的过亿位的精度。这些算法用程序实现起来比较复杂。因为计算过程中涉及两个大数的乘除运算,要用FFT(Fast Fourier Transform) 算法。FFT 可以将两个大数的乘除运算时间由O(n2)缩短为O(nlog(n))。

1914年,印度数学家Srinivasa Ramanujan在他的论文里发表了一系列共14条圆周率的计算公式,这是其中之一。这个公式每计算一项可以得到8位的十进制精度。1985年Gosper 用这个公式计算到了圆周率的17,500,000位。

可以用编程语言计算。以下是python语言

pi = 00

N = 100

for i in range(N):

pi += (1/pow(16,i) (  4/(8i +1) -2/(8i+4)-1/(8i+5) -1/(8i +6) )   )

print('圆周率为{:10f}'format(pi))

请把以上代码拷进python语言开发环境里运行,结果如下(下图是使用python开发环境Spyder运行上述代码的结果):圆周率为31415926536

扩展资料

电子计算机的出现使π值计算有了突飞猛进的发展。1949年,美国制造的世上首部电脑-ENIAC(ElectronicNumerical Integrator And Computer)在阿伯丁试验场启用了。次年,里特韦斯纳、冯纽曼和梅卓普利斯利用这部电脑,计算出π的2037个小数位。

这部电脑只用了70小时就完成了这项工作,扣除插入打孔卡所花的时间,等于平均两分钟算出一位数。五年后,IBM NORC(海军兵器研究计算机)只用了13分钟,就算出π的3089个小数位。

参考资料:

百度百科——圆周率

原理:根据圆面积的公式:s=πR2,当R=1时,S=π。由于圆的方程是:x^2+y^2=1(x^2为X的平方的意思),因此1/4圆面积为x轴、y轴和上述方程所包围的部分。如果在11的矩形中均匀地落入随机点,则落入1/4园中的点的概率就是1/4圆的面积。其4倍,就是圆面积。由于半径为1,该面积的值为π的值。程序如下:importjavautilRandom;publicclasspai{/@paramargs/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubintN=100000;/定义随机点数/intn=0,i,resulttimes;doubler;doublex,y;/坐标/Randoms=newRandom();for(resulttimes=0;resulttimes<10;resulttimes++){/输出十次结果/for(i=1;i<=N;i++){x=snextDouble();/在0~1之间产生一个随机x坐标/y=snextDouble();/在0~1之间产生一个随机y坐标/if(xx+yy<=10)n++;/统计落入单位圆中的点数/}r=(double)n/N;Systemoutprintln("Theresultofpaiis"+r4);/计算出π的值/n=0;}}}

在Matlab软件环境下可运行的程序。

1、用积分函数int()求解。在命令窗口中输入

>>fun=4/(1+xx);

>>p=int(fun,0,1)

运行结果

p =

pi

2、复化梯形法计算圆周率π。在命令窗口中输入

>> PI_Calculation

运行结果

复化梯形法解

n=1,p=3100000,r=0100000

n=2,p=3131176,r=0031176

n=3,p=3138988,r=0007812

n=4,p=3140942,r=0001953

n=5,p=3141430,r=0000488

n=6,p=3141552,r=0000122

n=7,p=3141582,r=0000031

n=8,p=3141590,r=0000008

#include <stdioh>

#define L 10000 //求10000位PI值

#define N L/4+1

// L 为位数,N是array长度

/圆周率后的小数位数是无止境的,如何使用电脑来计算这无止境的小数是一些数学家与程式设计师所感兴趣的,在这边介绍一个公式配合 大数运算,可以计算指定位数的圆周率。

John Wallis的圆周率公式:

//详细看网站介绍:>

#include<stdioh>

main()

{ float s,r,PI;

clrscr();

printf("input周长 s");

scanf("%f",&s);

printf("input半径 r");

scanf("%f",&r);

PI=s/(2r);

pringf("周长=%f,半径=%f\n圆周率PI=%f",s,r,PI);

}

n没有赋值,所以它就是0,For i = 1 To n 就不会运行,所以s为0

其实由于n是不能预先确定的,所以这个程序不适合用For循环,只要用一个Do循环即可:

Private Sub Form_Click()

Dim i&, n&, t&, s#

t = -1

Do

    i = i + 1

    t = t  -1

    s = s + t / (2  i - 1)

Loop While 1 / (2  i - 1) > 0000001

s = 4  s

Print "圆周率="; s

End Sub

如果题目要求一定要用For循环,那么可以放个假的For循环:

Private Sub Form_Click()

Dim i&, n&, t&, s#

t = -1

For i = 0 To 0

    Do

        i = i + 1

        t = t  -1

        s = s + t / (2  i - 1)

    Loop While 1 / (2  i - 1) > 0000001

Next

s = 4  s

Print "圆周率="; s

End Sub

另外,你把变量声明为Integer和Single,对于圆周率来说是不够用的,会溢出的。我的代码中已改为Long和Double了。

以上就是关于vb编程 算圆周率全部的内容,包括:vb编程 算圆周率、圆周率到底怎么算啊、现代计算机是如何计算圆周率的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zz/9467042.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存