2017-03-15 27 views
7

Dünkü Pi Günü için Matt Harper, 120 kez iki taraflı 120 zar (see the video here) yuvarlayarak Pi'ye yaklaştığı bir video yayınladı. Temel olarak, her bir rastgele sayı çifti için, onların eş misal olup olmadığını kontrol etmelisiniz. Daha sonra,Programım neden pi'ye yakın değil?

formülü hesaplanır.

Onun sonucu oldukça yakın olan 3.05 hakkındaydı.

Daha fazla rulo yapıldığında veya rastgele tam sayı aralığı arttığında ne olacağını görmek istedim. İlginç bir şekilde, programım neredeyse her zaman 3,05 veya yakın bir sonuç verdi, ne kadar iterasyonları veya rastgele aralığı ayarladığım önemli değil.

İşte programım. Python 3.6'da (Win64) koştum. Rasgele sayı üreteci Python'un kullandığı çok iyi olmalı, belki de programımda bir hata yaptım.

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)) 
+0

Dün videoyu gördüm ve bunu kendim denemeyi bile düşünmedim. Fikir için teşekkürler! Neden doğruluk elde edemediğine göre, idk. En iyi tahminim jeneratörün bir sınırlaması olurdu, ama Python'un jeneratörü hakkında çok az şey biliyorum. – Carcigenicate

cevap

10

Videoyu izlemedim, ancak formülü yanlış.

İki virgülün rastgele 1'den N'ye toplanma olasılığı, N'nin sonsuzluğa eğilim gösterdiği üzere 6/pi^2'ye eş değerdir. Bu cp/(cf + cp) ve cp/cf değil.

değiştirilmesi senin bununla pi: benim makinede çalıştırdığınızda

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

3,14263472915 verir.

+0

@ Random832: Başka bir hata olduğu için. "6/(cp/total)", "6/(cf/cp)" veya "6/(cf/total)" olmalıdır. – user2357112

+0

Son formülünüz için bir referans gösterebilir misiniz? Ben resmi türevleri arıyorum, ama hepsi ölçü teorisi kullanıyorlar ve ben bunu ortaklara ve kofaktörlere bağlayamıyorum. –

+0

@AkshatMahajan, onu P = 6/pi^2 olan orijinal iddiadan çıkarmak için basit bir cebirdir. Bütün karmaşık şeyler, bu iddiayı ispatlamak yerine, onu pi'ye yaklaştırmak için dönüştürecekler. – Random832

İlgili konular