Calculando o número Pí

P�
Sendo o título deste blog, o número Pí merece uma singela homenagem.
Neste artigo na wikipédia, apresenta algumas formas de calcular o número pí.

Utilizando a fómula:
Cálculo do número P�

Escrevi um pequeno programa em Lua:

function pi() 
  local summing = false
  local divisor = 1
  local sum     = 1
  return function() 
    divisor = divisor + 2
    if (summing) then
      sum = sum + (1/divisor)
    else
      sum = sum - (1/divisor)
    end
    summing = not summing
    return 4 * sum
    end
end

Para utiliza-lo, deve criar uma variável que contenha a função de retorno de pi().
Isso mesmo, em Lua as funções são variáveis e contem valor!

a = pi()
print(a()) -- Retorna: 2.6666666666667
print(a()) -- Retorna: 3.4666666666667
print(a()) -- Retorna: 2.8952380952381
print(a()) -- Retorna: 3.3396825396825
print(a()) -- Retorna: 2.9760461760462

Após cada execução, o resultado vai convergindo para o valor de Pí.
Porém, o artigo do wikipédia diz:

Esta série é facil para entender, porem é impraticável no uso como isto converge para n muito lentamente. Isto requer mais de 600 termos para aproximar o valor a 3,14 e bilhões de termos para obter uma acurácia de 10 casas decimais.

Ou seja, use apenas por diversão :-) O mesmo artigo apresenta outras equações, porém todas tem o mesmo funcionamento básico. Onde após cada termo calculado, o valor é armazenado e a próxima iteração aproxima o resultado do valor do número Pí.

Ah! O código a seguir executa 2,5milhões de vezes a função de cáculo e apresenta o resultado e o tempo.

t1 = os.time()
a = pi()
for v = 0, 2500000 do a() end  
t2 = os.time()
print('Apos 2.500.000 de vezes: ' .. a() .. ' e demorou: ' .. os.difftime(t2,t1) .. ' segundos')

Aqui o resultado foi:

Apos 2.500.000 de vezes: 3.1415930535893 e demorou: 1 segundos


Links
Página oficial da Linguagem Lua em http://www.lua.org/
Livro on-line sobre o Lua em http://www.lua.org/pil/
Artigo no wikipédia sobre o número Pí em http://en.wikipedia.org/wiki/Pi

2 thoughts on “Calculando o número Pí

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s