一、要求:
1.計算到圓周率后面越多位越好。
2.用進度條顯示計算的進度。
3.要求給出圓周率Π的具體計算方法和解釋。
二、算法:
1.拉馬努金公式:
2.高斯-勒讓德公式:





3.波爾文四次迭代式
這個公式由喬納森·波爾文和彼得·波爾文於1985年發表的。
bailey-borwein-plouffe算法
這個公式簡稱BBP公式,由David Bailey, Peter Borwein和Simon Plouffe於1995年共同發表。它打破了傳統的圓周率的算法,可以計算圓周率的任意第n位,而不用計算前面的n-1位。這為圓周率的分布式計算提供了可行性。
4.丘德諾夫斯基公式
這是由丘德諾夫斯基兄弟發現的,十分適合計算機編程,是目前計算機使用較快的一個公式。
5.萊布尼茨公式
π/4=1-1/3+1/5-1/7+1/9-1/11+……
6.蒙特卡羅法(打鳥法)
一個正方形內部相切一個圓,圓和正方形的面積之比是π/4。
在這個正方形內部,隨機產生n個點(這些點服從均勻分布),計算它們與中心點的距離是否大於圓的半徑,以此判斷是否落在圓的內部。
統計圓內的點數,與n的比值乘以4,就是π的值。理論上,n越大,計算的π值越准。
三、算法實現
以下采用蒙特卡羅法(打鳥法),代碼及圖片如下。
import math import time scale=10 print("執行開始") t=time.process_time() for i in range(scale+1): a,b='**'*i,'..'*(scale-i) c=(i/scale)*100 π=4*(4*math.atan(1/5)-math.atan(1/239)) print("[{}{}->%{}]".format(a,b,c)) time.sleep(0.1) print(π) print("程序用時:{:.2f}s".format(t)) print("執行結束")
運行結果:
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license()" for more information. >>> ================= RESTART: C:/Users/Benny/Desktop/打鳥法求圓周率.py =================執行開始 [....................->%0.0] [**..................->%10.0] [****................->%20.0] [******..............->%30.0] [********............->%40.0] [**********..........->%50.0] [************........->%60.0] [**************......->%70.0] [****************....->%80.0] [******************..->%90.0] [********************->%100.0] 3.1415926535897936 程序用時:0.11s 執行結束 >>>
另外,進度條還可以用python的pip庫來實現:
import mathimport timescale=10print("執行開始")t=time.process_time()for i in range(scale+1): a,b='**'*i,'..'*(scale-i) c=(i/scale)*100 π=4*(4*math.atan(1/5)-math.atan(1/239)) print("%{:3}[{}->{}]".format(a,b,c)) time.sleep(0.1)print(π)print("{:.2f}s".format(t))print("執行結束")