前言:
今天看官们对“如何用python输出π的值”都比较讲究,咱们都需要知道一些“如何用python输出π的值”的相关资讯。那么小编同时在网上收集了一些有关“如何用python输出π的值””的相关资讯,希望大家能喜欢,姐妹们一起来了解一下吧!在数学界,有这么一个困扰人们多年的问题,至今都有人在研究,那就是大名鼎鼎的——π。
π在数学界十分出名的,圆的面积公式就用到了π,S=πr²,π=3.14相信大家肯定知道吧,有些人或许能背得更多(你能背到几呢?欢迎评论![偷笑])。
但你以为就此结束了吗?目前,人们通过超级计算机算到了π的第808亿位,可是你知道他们是用什么方法算的吗?
今天,就给大家科普科普,以及用Python实现一下。
1、BBP公式
BBP公式,又称贝利-波尔温-普劳夫公式,具体公式如下:
这公式看起来很复杂,实际就是求和公式的简化,原式子:
k=0
π=[1/(16^k)]*[4/(8^k+1)-2/(8^k+4)-1/(8*k+5)-1/(8*k+6)]
k=1
π+=[1/(16^k)]*[4/(8^k+1)-2/(8^k+4)-1/(8*k+5)-1/(8*k+6)]
k=2
π+=[1/(16^k)]*[4/(8^k+1)-2/(8^k+4)-1/(8*k+5)-1/(8*k+6)]
k=3
……
k=无限
π+=[1/(16^k)]*[4/(8^k+1)-2/(8^k+4)-1/(8*k+5)-1/(8*k+6)]
这个用Python实现十分简单:
k=0times=1000pi=0for i in range(times): pi+=(1/pow(16,k))*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6)) k+=1
pi就代表π
k是从0~times
times是k的最大值
π=3.141592653589793
不知大家学了decimal标准库了没有
import decimala=decimal.Decimal(1.23456789)b=decimal.Decimal(3.141592653589793)decimal.getcontext().prec=20print(a*b)
结果可以精确小数点后20位
我们也可以将π精确化,顺便加计时:
import decimal as decimport timestart=time.time()k=0times=1000pi=0for i in range(times): pi+=(1/pow(16,k))*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6)) k+=1end=time.time()pi=dec.Decimal(pi)dec.getcontext().prec=20print("pi:"+str(pi))print("time:"+str(end-start))
pi=3.141592653589793115997963468544185161590576171875
这是个万能公式![思考]
2、蒙特卡罗算法
步骤如下:
如图所示的单位正方形和圆,随机抛洒点在正方形里,计算每个点到圆心的距离(0,0),从而得出点在圆内或圆外,用园内点数除以总点数就是π/4值,点个数越大越,π越精准。
这里有个小知识:
求二维坐标轴中任意一点到(0,0)点的距离=根号(x²+y²)
import randomimport mathimport timeimport decimaldarts=1000000hits=0start=time.time()for i in range(1,darts+1): x,y=random.random(),random.random() dist=math.sqrt(x**2+y**2) if dist<=1: hits+=1pi=4*(hits/darts)pi=decimal.Decimal(pi)decimal.getcontext().prec=20end=time.time()print("pi:"+str(pi))print("times:"+str(end-start))
darts是点数
hits是在圆内的点数
x,y是坐标
dist是到(0,0)的距离
得pi=3.14155199999999990012611306156031787395477294921875
不是很精准,但比较接近了,darts越多越精准。
今天就给大家分享到这里![强]
大家还知道什么计算圆周率π的方法吗?欢迎留言!
标签: #如何用python输出π的值