计算圆周率pi的方法
一、公式法
#CalPiV1.py pi=0 N=100 for i in range(N): pi+=1/pow(16,i)*(4/(8*i+1)- 2/(8*i+4)-1/(8*i+5)-1/(8*i+6)) print(pi)
二、蒙特卡罗
#CalPiV2.py import random import time N=1000*1000 k=0 start=time.perf_counter() for i in range(N): x,y=random.random(),random.random() dist=pow(x**2+y**2,0.5) if dist<=1.0: k+=1 pi=4*(k/N) print("pi={},run time={:.2f}s".format(pi,time.perf_counter()-start))
三、带进度条的运算
from random import random from math import sqrt from time import * from tqdm import tqdm DARTS=100000000 hits=0.0 clock() for i in range(1,DARTS+1): x,y=random(),random() dist=sqrt(x**2+y**2) if dist <=1.0: hits=hits+1 pi=4*(hits/DARTS) for i in tqdm(range(10)): print(" {:3}% ".format(i/10*100),end="") #这里的i/10*100指每10%显示一次 sleep((clock())/100)#用执行程序的总时间来算出进度条间隔的时间 print("pi的值{}.".format(pi)) print("运行时间:{:.5f}s".format(clock()))