Skip to content

Instantly share code, notes, and snippets.

@Nick3523
Created January 2, 2020 14:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nick3523/42ea3a359655dc968d7cc9c4d216c64d to your computer and use it in GitHub Desktop.
Save Nick3523/42ea3a359655dc968d7cc9c4d216c64d to your computer and use it in GitHub Desktop.
Buffon's Needle Problem
'''
n = nombre de fois où l'aiguille est lancée
nbEssais = nombre de fois où l'expérience est répetée
a = longueur de l'aiguille
b = distance entre 2 lattes
theta = l'angle formée par l'aiguille et la latte
xcenter = les cordonnées x de l'aiguille sur le sol
On limite les valeurs theta et du centre comme suit :
0 < theta < pi/2
0 < xcenter < b/2
'''
import random
import math
def buffon(n,nbEssais,a,b):
data = []
for i in range(nbEssais):
nhits = 0
for j in range(n):
xcent = random.uniform(0,b/2.0) #Les valeurs possibles du centre sont limitées à la moitié de la largeur
theta = random.uniform(0,math.pi/2) #De même, l'angle formé est limité entre 0 et pi/2
xtip = xcent - (a/2.0)*math.cos(theta) #Si les cordonnées x du centre de l'aiguille sont < au cos de l'angle formé par l'aiguille et la latte, alors l'aiguille coupe 2 lattes.
if xtip < 0 :
nhits += 1
c = 2.0*a*n
d = b*nhits
approx_pi = c/d
data.append(approx_pi)
return data
'''
La fonction accurate_pi va m'indiquer jusqu'à quel % mon experience me rapproche de la vrai valeur de pi, hâte de voir le résultat !
'''
def accurate_pi(data):
true_pi = math.pi
max_accurate = 0
for d in data :
tmp = d/true_pi
if(tmp <= 1) : #Si le pourcentage dépasse 1, ça signifie que que l'estimation dépasse la vrai valeur de pi, ça ne m'intéresse pas d'un milimètre alors !
if tmp > max_accurate :
max_accurate = tmp
print("La plus haute précision obtenue est ",max_accurate)
nbEssais=500
n=4000
a = 2 #longueur de l'aiguille vaut 2
b = 2 #largeur entre les lattes vaut 2
data = buffon(n,nbEssais,a,b)
accurate_pi(data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment