Skip to content

Instantly share code, notes, and snippets.

@davicfg
Forked from fbidu/monte_carlo.py
Last active August 29, 2015 14:24
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 davicfg/783d531ffa0c52b6c865 to your computer and use it in GitHub Desktop.
Save davicfg/783d531ffa0c52b6c865 to your computer and use it in GitHub Desktop.
# -*- encoding: latin-1 -*
# Importando a biblioteca de matematica
import math
# Importando a biblioteca de aleatoriedade
import random
# Inicialmente, não temos nenhum ponto 'dentro' do circulo
pontos_no_circulo = 0
# Não sorteamos também nenhum ponto
pontos_sorteados = 0
# Sortearemos então, 10.000 pontos
for i in range(10000):
# Incrementamos o numero de pontos sorteados
pontos_sorteados = pontos_sorteados + 1.0
# Sorteando dois pontos x e y
# A função uniform sorteia numeros com casas decimais
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
# Calculando a distancia do ponto x, y com a origem
# A função 'hypot' da biblioteca math calcula a distancia euclidiana
distancia = math.hypot(x, y)
# Verificamos, entao, se a distancia encontrada
# é compatível com nosso criterio de aceitação (<= 1)
if distancia <= 1:
pontos_no_circulo = pontos_no_circulo + 1.0
# Finalmente, depois de sorteados os pontos, calculamos a razão
razao_entre_total = pontos_no_circulo / pontos_sorteados
# A estimativa de pi vai ser 4 vezes esse valor
pi_estimado = 4 * razao_entre_total
# Imprimimos a estimativa
print(pi_estimado)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment