昨日のPi Dayでは、マット・ハーパーは2つの120面のサイコロを500回転がしてPiを近似したビデオを公開した(see the video here)。基本的には、乱数の各ペアについて、それらが共起しているかどうかをチェックする必要があります。次に、式私のプログラムはなぜ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