Introdução

Esta nota técnica apresenta uma derivação de limites superiores para \(\pi\) a partir de um círculo de raio \(1/2\) escrito em polígonos regulares. Arquimedes (287-212 AC) foi um dos pioneiros no uso desse método, considerando polígonos regulares de 96 faces. A nota discute também dificultades numéricas nos cálculos em precisão dupla, algo que limita a precisão do limite mínimo calculado.

É apresentada uma solução para o problema de precisão com a utilização de variáveis com cerca de 100 digitos significativos (em lugar das 15 a 16 em dupla precisão), viabilizada pelo package Rmpfr do R. Esse procedimento possibilitou a obtenção de uma estimativa para \(\pi\) correta nas primeiras 20 decimais. O objetivo do trabalho é somente didático e certamente não teve qualquer intenção de quebrar o record atual, que em 2014 já superava 13 trilhões de dígitos. Apesar desse método geométrico ser atrativo, há hoje outros métodos mais eficientes que levam à mais rápida convergência.

Como exercício desenvolva um processo similar para obtenção de limite superior.

Limite superior para \(\pi\) por hexágono inscrito

Considere a figura a seguir, contendo um círculo com raio \(1/2\) inscrito em um polígono regular com 6 faces \(l=6\) (hexágono).

figura PI

Fig 1: Hexágono sobrescrito no círculo

Pela geometria da Fig 1, podemos concluir que o perímetro do círculo \(P_c\) será dado por:

Se \(P_h\) representa o perímetro do hexágono, pode-se concluir facilmente que \(P_h>P_c\), dado que o menor caminho entre dos pontos é uma reta. Observando o triângulo isóceles formado pelo segmento do polígono representado na figura. Podemos obter o valor da base do triângulo \((s)\), e em sequência \(P_h=l\times s\) da seguinte forma:

, tem-se que \(P_h=3,4642\).

Mas esse limite superior pode ser melhorado, usando em lugar do hexágono, um polígono regular inscrito de 12 lados (dodecágono).

Limite superior para \(\pi\) por dodecágono inscrito

Considere a Fig 2 a seguir, construida a partir da anterior, que observa um novo polígono regular de 12 faces (dodecágono) sobrescrevendo o círculo. Percebe-se que os triângulos formados pela forma geométrica possuem mesma altura \(h\) do hexágono anterior. obtidos a partir da biseção do ângulo de 60 graus do segmento do hexágono.

figura PI

Fig 2: Construindo o dodecágono sobrescrito

Para obter \(s'\), o comprimento do lado do dodecágono, podemos, com raciocínio similar ao usado anteriormente, partir da seguinte regra:

Tal que \(l=12\) e \(h=r=\frac{1}{2}\). Desse modo, obtemos que:

Encontrando o valor de \(P_h\)

Perceba que \(h\) permanecerá constante caso repliquemos a equação aumentando o número de lados \((l)\).

Podemos definir que o valor de \(\pi\) é:

Ou, utilizando o R para os cálculos, lembrando que \(s=1/2\), obtemos

h<-1/2
slinha<-tan((360/(2*12))*pi/180)*2*h
Pd<-12*slinha
cat("Pd = ",Pd)
## Pd =  3.21539

Concluindo-se então um novo (e melhor) limite inferior para \(\pi\):

Melhores limites com polígonos de mais lados

O mesmo argumento utilizado na Fig 2 para a construção do dodecágono a partir do hexágono pode ser repetido para construção de um polígono regular sobrescrevendo de 24 faces a partir do dodecágono, e assim sucessivamente, dobrando-se a cada passo o número de faces (48, 96, 192 … ).

Para facilitar a construção, considere a sequência de polígonos regulares internos caracterizados pelo índice \(t=1,2,\ldots,\) em que o número de lados \(L_t\) é definido por * \(L_t=3\times 2^t\) Com essa definição \(t=1\) corresponde ao hexágono, \(t=2\) ao dodecágono e assim sucessivamente, dobrando-se o número de lados, na medida que \(t\) cresce uma unidade. E utilizando o mesmo argumento usado no ultimo tópico podemos concluir que

com \(s_1=1\) correspondendo ao lado do hexágono.

Se \(s_t\) e \(P_t\) representam, respectivamente, o comprimento do lado do polígono \(t\), tem-se

Usando a equação acima, partindo de \(t=1\) podemos obter limites superiores para \(\pi\) que sejam arbitrariamente melhores. A função do R definida a seguir possibilita a obtenção do limite superiores para \(\pi\) para \(t=n\), com fundamento nos argumentos desenvolvidos:

acha_limsup<-function(n,h=0.5){
  for(i in 1:n){
    L<-3*2^i
    s<-tan((360/(2*L))*pi/180)*(2*h)
    p<-L*s
    cat(sprintf("t= %2i Lados: %10.0f Lim sup: %0.17f dif %0.17f \n",i,L,p,p-pi))
  }    
}

Testando a função definida acima com \(t=5\), correspondente ao polígono de 96 faces, computamos o limite superior obtido por Arquimedes por

acha_limsup(5)
## t=  1 Lados:          6 Lim sup: 3.46410161513775439 dif 0.32250896154796127 
## t=  2 Lados:         12 Lim sup: 3.21539030917347235 dif 0.07379765558367923 
## t=  3 Lados:         24 Lim sup: 3.15965994209750001 dif 0.01806728850770689 
## t=  4 Lados:         48 Lim sup: 3.14608621513143483 dif 0.00449356154164171 
## t=  5 Lados:         96 Lim sup: 3.14271459964536826 dif 0.00112194605557514

A função mostra, além do valor computado para o limite superior, a cada passo, a diferença entre esse valor e o valor de \(pi\) definido internamente pelo R, através da constante \(pi\).

Problemas numéricos com os valores computados

Se usarmos aumentarmos arbitrariamente \(t\) no procedimento apresentado no ultimo parágrafo, observa-se, a partir de um certo ponto (\(t=16\)), que os valores obtidos para o limite indicam alguma anomalia no processo computacional.

acha_limsup(25)
## t=  1 Lados:          6 Lim sup: 3.46410161513775439 dif 0.32250896154796127 
## t=  2 Lados:         12 Lim sup: 3.21539030917347235 dif 0.07379765558367923 
## t=  3 Lados:         24 Lim sup: 3.15965994209750001 dif 0.01806728850770689 
## t=  4 Lados:         48 Lim sup: 3.14608621513143483 dif 0.00449356154164171 
## t=  5 Lados:         96 Lim sup: 3.14271459964536826 dif 0.00112194605557514 
## t=  6 Lados:        192 Lim sup: 3.14187304997982331 dif 0.00028039639003019 
## t=  7 Lados:        384 Lim sup: 3.14166274705684812 dif 0.00007009346705500 
## t=  8 Lados:        768 Lim sup: 3.14161017660468911 dif 0.00001752301489599 
## t=  9 Lados:       1536 Lim sup: 3.14159703432152559 dif 0.00000438073173248 
## t= 10 Lados:       3072 Lim sup: 3.14159374877135189 dif 0.00000109518155877 
## t= 11 Lados:       6144 Lim sup: 3.14159292738509688 dif 0.00000027379530376 
## t= 12 Lados:      12288 Lim sup: 3.14159272203861351 dif 0.00000006844882039 
## t= 13 Lados:      24576 Lim sup: 3.14159267070199810 dif 0.00000001711220499 
## t= 14 Lados:      49152 Lim sup: 3.14159265786784392 dif 0.00000000427805080 
## t= 15 Lados:      98304 Lim sup: 3.14159265465930559 dif 0.00000000106951248 
## t= 16 Lados:     196608 Lim sup: 3.14159265385717124 dif 0.00000000026737812 
## t= 17 Lados:     393216 Lim sup: 3.14159265365663742 dif 0.00000000006684431 
## t= 18 Lados:     786432 Lim sup: 3.14159265360650419 dif 0.00000000001671108 
## t= 19 Lados:    1572864 Lim sup: 3.14159265359397111 dif 0.00000000000417799 
## t= 20 Lados:    3145728 Lim sup: 3.14159265359083761 dif 0.00000000000104450 
## t= 21 Lados:    6291456 Lim sup: 3.14159265359005424 dif 0.00000000000026112 
## t= 22 Lados:   12582912 Lim sup: 3.14159265358985795 dif 0.00000000000006484 
## t= 23 Lados:   25165824 Lim sup: 3.14159265358980910 dif 0.00000000000001599 
## t= 24 Lados:   50331648 Lim sup: 3.14159265358979667 dif 0.00000000000000355 
## t= 25 Lados:  100663296 Lim sup: 3.14159265358979400 dif 0.00000000000000089

Isso se deve à representação finita dos números pelos computadores, em geral limitada a 15 a 16 digitos significativos, em cálculos envolvendo a chamada precisão dupla, algo que pode trazer dificuldades aos cálculos realizados.

Uma solução possível para o problema pode envolver o uso de recursos do R para cálculos utilizando um número arbitrário de digitos significativos nos cálculos. Isso é implementado pelo package Rmpfr, que deve ser instalado antes de sua utilização.

A seguir apresentamos uma nova versão da função definida anteriormente, que considera cálculos com \(k\) digitos significativos, onde \(k\) é um argumento da função. Usamos na função a constante \(\pi\) definida no package Rmpfr que também pode ser definida com um número arbitrário de digitos significativos, para fazer as comparações. A função mpfr do package define um número com um numero de bits de interesse e esse número de bits é propagado para todos números e operações que dependem desse número. Na função o número de bits é calculado a partir de um número de digitos de interesse \(k\), a partir de recomendações na documentação do package.

acha_limsup2<-function(n,k){
  require("Rmpfr")
  bits<-k*log2(10) #convertendo digitos em bits
  s<-mpfr(1,bits) # s passa a ser um número com k digitos significativos
  p<-mpfr(0,bits)
  novopi<-Const("pi",bits)
  h<-1/2
  for(i in 1:n){
    L<-3*2^mpfr(i,bits)
    s<-tan((360/(2*L))*pi/180)*(2*h)
    p<-L*s #operação propaga o número de digitos definido para p
    cat(sprintf("t= %2i Lados: %12.0f Lim inf: %s dif: %s \n",i,L,format(p,24),format(novopi-p,24)))
  }    
}

Testamos a seguir a nova função considerando 100 digitos significativos nos cálculos, para obtenção de um limite inferior para \(\pi\) considerando \(t=35\), um polígono regular inscrito com 103079215104 lados. Nesse caso, as decimais de \(\pi\) estão corretas nas primeiras 21 casas decimais.

acha_limsup2(40,150)
## t=  1 Lados:            6 Lim inf: 3.46410161513775442376865 dif: -0.322508961547961185306009 
## t=  2 Lados:           12 Lim inf: 3.21539030917347234641340 dif: -0.0737976555836791079507522 
## t=  3 Lados:           24 Lim inf: 3.15965994209750035872935 dif: -0.0180672885077071202667073 
## t=  4 Lados:           48 Lim inf: 3.14608621513143484810732 dif: -0.00449356154164160964467390 
## t=  5 Lados:           96 Lim inf: 3.14271459964536817557294 dif: -0.00112194605557493711029215 
## t=  6 Lados:          192 Lim inf: 3.14187304997982374924801 dif: -0.000280396390030510785370455 
## t=  7 Lados:          384 Lim inf: 3.14166274705684840375161 dif: -7.00934670551652889702782e-5 
## t=  8 Lados:          768 Lim inf: 3.14161017660468941629674 dif: -1.75230148961778340978218e-5 
## t=  9 Lados:         1536 Lim inf: 3.14159703432152602952803 dif: -4.38073173279106538329088e-6 
## t= 10 Lados:         3072 Lim inf: 3.14159374877135190551117 dif: -1.09518155866704852976140e-6 
## t= 11 Lados:         6144 Lim inf: 3.14159292738509691108330 dif: -2.73795303672620652982002e-7 
## t= 12 Lados:        12288 Lim inf: 3.14159272203861369587812 dif: -6.84488204574154733687269e-8 
## t= 13 Lados:        24576 Lim inf: 3.14159267070199792541234 dif: -1.71122046869496929512966e-8 
## t= 14 Lados:        49152 Lim inf: 3.14159265786784429737933 dif: -4.27805105891668473102458e-9 
## t= 15 Lados:        98304 Lim inf: 3.14159265465930591003254 dif: -1.06951267156989696916070e-9 
## t= 16 Lados:       196608 Lim inf: 3.14159265385717131442468 dif: -2.67378075962041539019186e-10 
## t= 17 Lados:       393216 Lim inf: 3.14159265365663766559952 dif: -6.68444271368802757540738e-11 
## t= 18 Lados:       786432 Lim inf: 3.14159265360650425339803 dif: -1.67110149353901220777340e-11 
## t= 19 Lados:      1572864 Lim inf: 3.14159265359397090034796 dif: -4.17766188531759379236468e-12 
## t= 20 Lados:      3145728 Lim inf: 3.14159265359083756208546 dif: -1.04432362281821235437910e-12 
## t= 21 Lados:      6291456 Lim inf: 3.14159265359005422751984 dif: -2.60989057194538909467498e-13 
## t= 22 Lados:     12582912 Lim inf: 3.14159265358985839387843 dif: -6.51554157886937929011460e-14 
## t= 23 Lados:     25165824 Lim inf: 3.14159265358980943546808 dif: -1.61970054372370915509047e-14 
## t= 24 Lados:     50331648 Lim inf: 3.14159265358979719586549 dif: -3.95740284937320232530362e-15 
## t= 25 Lados:    100663296 Lim inf: 3.14159265358979413596485 dif: -8.97502202407247900900787e-16 
## t= 26 Lados:    201326592 Lim inf: 3.14159265358979337098968 dif: -1.32527040665760412424919e-16 
## t= 27 Lados:    402653184 Lim inf: 3.14159265358979317974589 dif: 5.87167497696113898424954e-17 
## t= 28 Lados:    805306368 Lim inf: 3.14159265358979313193495 dif: 1.06527697378454336043627e-16 
## t= 29 Lados:   1610612736 Lim inf: 3.14159265358979311998221 dif: 1.18480434280665072321052e-16 
## t= 30 Lados:   3221225472 Lim inf: 3.14159265358979311699402 dif: 1.21468618506217756373355e-16 
## t= 31 Lados:   6442450944 Lim inf: 3.14159265358979311624698 dif: 1.22215664562605927385365e-16 
## t= 32 Lados:  12884901888 Lim inf: 3.14159265358979311606022 dif: 1.22402426076702970138301e-16 
## t= 33 Lados:  25769803776 Lim inf: 3.14159265358979311601353 dif: 1.22449116455227230826530e-16 
## t= 34 Lados:  51539607552 Lim inf: 3.14159265358979311600185 dif: 1.22460789049858295998588e-16 
## t= 35 Lados: 103079215104 Lim inf: 3.14159265358979311599894 dif: 1.22463707198516062291602e-16 
## t= 36 Lados: 206158430208 Lim inf: 3.14159265358979311599821 dif: 1.22464436735680503864855e-16 
## t= 37 Lados: 412316860416 Lim inf: 3.14159265358979311599802 dif: 1.22464619119971614258169e-16 
## t= 38 Lados: 824633720832 Lim inf: 3.14159265358979311599798 dif: 1.22464664716044391856497e-16 
## t= 39 Lados: 1649267441664 Lim inf: 3.14159265358979311599797 dif: 1.22464676115062586256079e-16 
## t= 40 Lados: 3298534883328 Lim inf: 3.14159265358979311599796 dif: 1.22464678964817134855975e-16