Entendendo o que você está tentando calcular
O número pi () é a razão entre a circunferência de um círculo e seu diâmetro. Não é nada misterioso sobre isso. O problema é que essa razão nunca termina e nunca se repete, então qualquer cálculo que fizermos será sempre uma aproximação. Isso muda completamente a abordagem: você não está calculando pi "completo", você está decidindo com quantas casas decimais precisa e escolhendo o método mais eficiente para chegar lá. Se você está lendo isso achando que vai medir um círculo físico com uma régua e um barbante, esquece. A precisão do instrumento limita tudo antes mesmo de você começar. Eu já vi gente passar duas horas tentando reconstruir o método de Arquimedes com régua e transferidor, achando que estava "descobrindo" algo. Não estava. O erro de medição física já ultrapassa o vigésimo dígito antes de você terminar.
Como calcular o número pi usando métodos práticos
O método que a maioria das pessoas aprende na escola é a série de Leibniz: /4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ... Parece elegante. É terrivelmente ineficiente. Para obter apenas dez casas decimais corretas, você precisaria somar cerca de cinco bilhões de termos. Não vale o tempo. O que funciona na prática são métodos iterativos que convergem muito mais rápido. O algoritmo de Gauss-Legendre, por exemplo, dobra o número de dígitos corretos a cada iteração. Começa com quatro valores simples e em cinco rodadas você tem mais de cem casas decimais precisas. Isso é o que programadores e pesquisadores realmente usam quando precisam de pi com precisão específica.
Vou mostrar como isso funciona na prática com código Python. Se você não tem Python instalado, baixa da site oficial. A versão 3.10 ou superior funciona sem dor de cabeça. Crie um arquivo chamado calcular_pi.py e cole isto:
import math
from decimal import Decimal, getcontext
def calcular_pi_gauss_legendre(precisao=50):
getcontext().prec = precisao + 10
a = Decimal(1)
b = Decimal(1) / Decimal(2).sqrt()
t = Decimal(1) / Decimal(4)
p = Decimal(1)
for _ in range(10):
a_anterior = a
b = (a_anterior + b) / 2
a = a_anterior
t = t - p * (a_anterior - a) 2
p = p * 2
pi = (a + b) 2 / (4 * t)
return pi
resultado = calcular_pi_gauss_legendre(50)
print(resultado) Execute com python calcular_pi.py. O resultado vem com cinquenta casas decimais confiáveis em menos de um segundo na maioria dos computadores.
Tem um detalhe importante aqui que muita gente erra. O parâmetro precisao + 10 no getcontext() não é luxo. ODecimal do Python faz arredondamentos intermediários, e se você pedir exatamente cinquenta casas sem margem extra, os últimos dígitos podem estar errados. Sempre peça dez a mais do que você pretende usar.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Outros métodos que existem e quando usá-los
O método de Monte Carlo é famoso porque é visualmente intuitivo. Você joga pontos aleatórios dentro de um quadrado que contém um quadrante de círculo e conta a proporção que cai dentro do arco. A razão converge para /4. A desvantagem é que a convergência é da ordem de 1/N, onde N é o número de pontos. Para ganhar um dígito extra de precisão, você precisa multiplicar o número de pontos por cem. É útil para demonstração em sala de aula, inútil para qualquer coisa séria. Existe também a fórmula de Chudnovsky, que é a que recordistas mundiais usam para calcular trilhões de dígitos. É extremamente eficiente, mas a implementação é bem mais complexa. Requer aritmética de multiprecision e a série envolve coeficientes grandes que precisam ser calculados com cuidado. Se o seu objetivo é apenas algumas dezenas de casas, o Gauss-Legendre resolve. Se você precisa de milhões, aí sim vale a pena estudar a de Chudnovsky.
Um problema real que eu encontrei recentemente: ao rodar o Gauss-Legendre em um servidor com limitação de memória, a variável p crescia demais nas iterações finais e o processo travava. A solução foi limitar o número de iterações ao necessário e liberar as variáveis intermediárias usando del antes de cada novo loop. Não é um problema do algoritmo em si, é de gestão de memória. Em produção, isso faz diferença.
Arquivo pronto para baixar
Se você quer um arquivo Python completo com ambas as implementações, incluindo validação de saída e tratamento de erros básico, eu tenho um repositório público no GitHub atualizado regularmente. O link é github.com/sapiens-ai/calcular-pi. Lá tem o código comentado, testes de unidade e um README explicando como ajustar a precisão conforme a necessidade. Não tem pegadinha, é código aberto.
O que você precisa decidir antes de começar
A pergunta certa não é "como calcular pi". A pergunta certa é "quantas casas decimais eu preciso e por quê". Para engenharia civil, dez casas são mais do que suficientes. Para criptografia, talvez cinquenta. Para testes de hardware de supercomputadores, bilhões. Definir isso antes de escolher o método economiza horas de trabalho desnecessário. O erro mais comum que eu vejo é alguém começar com Monte Carlo achando que vai chegar rápido em dez casas. Leva vinte minutos e o resultado fica em três casas. Troca para Gauss-Legendre e em dois segundos resolve. A lição é: conheça a taxa de convergência do método antes de executar qualquer coisa.
Outra armadilha: confiar nos últimos dígitos de uma biblioteca padrão sem verificar. A função math.pi do Python retorna pi com quinze casas decimais (precisão dupla). Se você precisa de mais, precisa ir para Decimal ou alguma biblioteca especializada como mpmath. Usar math.pi quando o projeto exige vinte casas é erro de quem não presta atenção. Para a maioria dos casos do dia a dia, o script Gauss-Legendre que mostrei acima resolve. Roda rápido, é fácil de entender e não requer dependências externas além da biblioteca padrão. Baixe, adapte e teste com diferentes valores de precisão para ver como se comporta. A prática mostra mais do que qualquer explicação teórica.