Für den gestrigen Pi-Tag veröffentlichte Matt Harper ein Video, in dem er Pi näher kam, indem er zwei 120-seitige Würfel 500 mal rollte (see the video here). Grundsätzlich müssen Sie für jedes Zufallszahlenpaar prüfen, ob es sich um Koprimente handelt oder nicht. Dann wird die Formel berechnet: Warum nähert sich mein Programm nicht Pi?
Sein Ergebnis war etwa 3,05, die ziemlich nahe ist.
Ich wollte sehen, was passiert, wenn mehr Rollen gemacht werden oder wenn der Bereich der zufälligen Ganzzahlen erhöht wird. Interessanterweise ergab mein Programm fast immer ein Ergebnis von 3,05 oder nahe bei ihm, egal wie hoch ich die Iterationen oder den zufälligen Bereich einstelle.
Hier ist mein Programm. Ich habe es auf Python 3.6 (Win64) ausgeführt. Der Zufallszahlengenerator, den Python benutzt, soll sehr gut sein, also habe ich vielleicht einen Fehler in meinem Programm gemacht?
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))
Sah das Video gestern und dachte nicht einmal daran, es selbst zu versuchen. Danke für die Idee! Warum es nicht genau wird, idk. Meine beste Vermutung wäre eine Beschränkung des Generators, aber ich weiß wenig über Pythons Generator. – Carcigenicate