用python計算圓周率π


用python計算圓周率π

一、要求

1.要起義能計算到圓周率后面越多位越好。

2.用進度條顯示計算的進度,能給出越多種進度條越好。

3.要求給出圓周率π的具體公式或者算法說明。

二、算法

1、馬青公式:馬青公式每計算一項可以得到1.4位的十進制精度。

2、蒙特卡羅法(我們使用這種方法)

一個正方形內部相切一個圓,圓和正方形的面積之比是π/4。 


在這個正方形內部,隨機產生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()))

  效果如下:

 

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)    #用執行程序的總時間來算出進度條間隔的時間

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM