第一篇 工具集的源码,很简单,仅做个记录。
公式法求圆周率
import time
pi = 0
N = 100
t1=time.process_time()
for k in range(N):
pi += 1/pow(16,k)*( \
4/(8*k+1) - 2/(8*k+4) - \
1/(8*k+5) - 1/(8*k+6) )
t2=time.process_time()
print("{:>10}".format(t2-t1))
print("圆周率值是: {}".format(pi))
工程学方法:蒙特卡洛
蒙特卡洛方法。
import time,random
ti1=time.process_time()
sum=0
N=1000*1000
for i in range(N):#循环一百万次
x,y=random.random(),random.random()#0-1的随机小数组成的二维坐标
end=(x**2+y**2)**0.5
if end<=1:#随机点在圆内
sum+=1
pi=(sum/N)*4
ti2=time.process_time()
print("圆周率是%.2f\n执行时间为%fs"%(pi,ti2-ti1))
采用撒点的方式。生成一百万个0-1之间的随机坐标,计算坐标到原点的距离,如果距离小于给定半径,那么点在圆内,然后计数。
理论上讲,只要撒点数量足够,那么点撒在圆内的概率即是1/4圆的面积比上小正方形上。
算法给定半径为1,sum/N即为圆面积,pi=S/r**2,得到pi=(sum/N)*4
——————