-
Notifications
You must be signed in to change notification settings - Fork 0
/
calculoPi.py
42 lines (30 loc) · 1.2 KB
/
calculoPi.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import random
import math
from estadisticas import desviacion_estandar, media
def aventar_agujas(numero_de_agujas):
adentro_del_circulo = 0
for _ in range(numero_de_agujas):
x = random.random() * random.choice([-1, 1])
y = random.random() * random.choice([-1, 1])
distancia_desde_el_centro = math.sqrt(x**2 + y**2)
if distancia_desde_el_centro <= 1:
adentro_del_circulo += 1
return (2 * adentro_del_circulo) / numero_de_agujas
def estimacion(numero_de_agujas, numero_de_intentos):
estimados = []
for _ in range(numero_de_intentos):
estimacion_pi = aventar_agujas(numero_de_agujas)
estimados.append(estimacion_pi)
media_estimados = media(estimados)
sigma = desviacion_estandar(estimados)
print(f'Est={round(media_estimados, 5)}, sigma={round(sigma, 5)}, agujas={numero_de_agujas}')
return (media_estimados, sigma)
def estimar_pi(precision, numero_de_intentos):
numero_de_agujas = 1000
sigma = precision
while sigma >= precision / 1.96:
media, sigma = estimacion(numero_de_agujas, numero_de_intentos)
numero_de_agujas *= 2
return media
if __name__ == '__main__':
estimar_pi(0.01, 1000)