對於昨天的Pi Day,Matt Harper發表了一段視頻,他通過滾動兩個120面的骰子500次(see the video here)來逼近Pi。基本上,對於每一對隨機數字,你必須檢查它們是否是互斥的。然後,公式爲爲什麼我的程序不適合pi?
pi = sqrt(6/(n_coprimes/n_cofactors)) # EDIT: Wrong premise. Misremembered the formula.
被計算。
他的結果約爲3.05,這相當接近。
我想看看更多的卷完成或隨機整數的範圍增加時會發生什麼。有趣的是,無論我設置迭代次數或隨機範圍多高,我的程序幾乎總是給出3.05或接近它的結果。
這是我的程序。我在Python 3.6(Win64)上運行它。 Python使用的隨機數生成器應該非常好,所以也許我在程序中犯了一個錯誤?
import random
from math import gcd, sqrt
def pi(cp, cf):
return sqrt(6/(cf/cp)) # EDIT: Second error - switched numerator/denominator...
coprime = 0
cofactor = 0
iterations = 1000000
for i in range(iterations):
x = random.randint(0,1000000)
y = random.randint(0,1000000)
if gcd(x,y) > 1:
cofactor += 1
else:
coprime += 1
print(pi(coprime, cofactor))
昨天看了視頻,甚至沒有想到自己試試這個。感謝您的想法!至於爲什麼它不獲得準確性,idk。我最好的猜測是發生器的限制,但我對Python的生成器知之甚少。 – Carcigenicate