簡體   English   中英

為什么我的程序不接近pi?

[英]Why doesn't my program approximate pi?

在昨天的Pi Day中,Matt Harper發布了一段視頻,他通過滾動兩個120面骰子500次來接近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))

我沒看過視頻,但你的公式錯了。

當從N傾向於無窮大時,從1到N隨機選取的兩個整數是互質的概率趨於6 / pi ^ 2。 那是cp /(cf + cp)而不是cp / cf。

用這個替換你的pi

def pi(cp, cf):
    fcp = cp / float(cp + cf)
    return sqrt(6/fcp)

當我在我的機器上運行時給出3.14263472915。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM