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.
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).
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).
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.
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\):
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\).
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