用python返回值计算圆周率_用python计算圆周率π

用python计算圆周率π

一、要求

1.要起义能计算到圆周率后面越多位越好。

2.用进度条显示计算的进度,能给出越多种进度条越好。

3.要求给出圆周率π的具体公式或者算法说明。

二、算法

1、马青公式:马青公式每计算一项可以得到1.4位的十进制精度。

1966696-20200319220944357-1732036118.png

2、蒙特卡罗法(我们使用这种方法)

一个正方形内部相切一个圆,圆和正方形的面积之比是π/4。

1966696-20200322153137033-63039675.jpg

在这个正方形内部,随机产生n个点(这些点服从均匀分布),计算它们与中心点的距离是否大于圆的半径,以此判断是否落在圆的内部。

统计圆内的点数,与n的比值乘以4,就是π的值。理论上,n越大,计算的π值越准

三、进度条

1、time库:

(1)perf_counter( )函数,用于测量时间,返回一个CPU级别的精确时间计数值,单位为妙,由于这个计数值起点不确定,连续调用使用差值才有意义。

(2)sleep(s)函数,产生 s妙的休眠时间,可以是浮点数,如time.sleep(3.5)。

(3)time.clock()函数,统计cpu时间 的工具,这在统计某一程序或函数的执行速度最为合适。两次调用time.clock()函数的插值即为程序运行的cpu时间。

2、tqdm库:Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)。

步骤如下:

(1)安装tqdm

pip install tqd

(2)导入tqdm库

from tqdm import tqdm

(3)tqdm示例

for i in tqdm(range(1000000)):

pass

四、算法实现

1、time库

from random import random

from time import clock

DARTS=100000

hits = 0.0

a=1

clock()

for i in range(1,DARTS+1):

x,y = random(),random()

dist = pow(x ** 2 + y ** 2,0.5)

if dist<=1.0:

hits = hits + 1

if i== DARTS*0.01*a :

print("\r%{} [{}->{}]".format(a,'*'*a,'-'*(10-a)),end="")

a+=3

pi = 4* (hits/DARTS)

print("\nPi=={:.7f}".format(pi))

print("运行时间为:{:.4f}s".format(clock()))

效果如下:

1966696-20200320150135870-1775944894.jpg

2、tqdm库

from math import *

from tqdm import tqdm

from time import *

total,s,n,t=0.0,1,1.0,1.0

clock()

while(fabs(t)>=1e-6):

total+=t

n+=2

s=-s

t=s/n

k=total*4

print("π值是{:.10f} 运行时间为{:.4f}秒".format(k,clock()))

for i in tqdm(range(101)):

print("\r{:3}%".format(i),end="")

sleep((clock())/100) #用执行程序的总时间来算出进度条间隔的时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值