O Pi (ou π) é uma constante matemática. É definido como a razão entre o comprimento de uma circunferência e seu diâmetro. Seu valor aproximado para duas casas decimais é 3,14. Neste link é possível ver o primeiro milhão de casas decimais de π (o número 3, referente à unidade, foi excluído).
Hoje, dia 14 de março, é comemorado o Dia do Pi. Isto se deve à maneira como se representam as datas nos Estados Unidos. Como 3/14 é a maneira utilizada se fazer referência ao dia 14 de março no sistema daquele país, convencionou-se considerar este dia como sendo o Dia do Pi.
Para não deixar a data passar em branco, resolvi fazer duas coisas. A primeira delas é verificar quantas vezes cada dígito de 0 a 9 aparece no primeiro milhão de casas decimais de π. Assim, seria possível tentar encontrar algum padrão nestes números, embora seja provado pela matemática que π não possui padrão algum, ao menos em seu primeiro milhão de dígitos.
Dígito | Frequência |
---|---|
0 | 99959 |
1 | 99758 |
2 | 100026 |
3 | 100229 |
4 | 100230 |
5 | 100359 |
6 | 99548 |
7 | 99800 |
8 | 99985 |
9 | 100106 |
Como podemos ver, há dígitos que ocorrem mais do que outros. Por exemplo, o dígito 6 ocorre 100359 vezes no primeiro milhão de casas decimais, enquanto 7 ocorre apenas 99548 vezes. Embora hajam 811 ocorrências a mais de 6 do que 7, se formos olhar de modo percentual, isto equivale a uma diferença de apenas 0,8%. Não dá pra dizer que é algo considerável.
Mas também é possível visualizar os dígitos de π, procurando padrões visuais neles. A figura abaixo tem dimensão 1000 x 1000 pixels. Cada pixel foi colorido com uma cor variando do azul bem escuro ao azul bem claro. São 10 tonalidades, variando de acordo com a posição do dígito no π. E o que podemos perceber na imagem?
Absolutamente nada. O π é apenas ruído. Não é possível distinguir a imagem formada pelo primeiro milhão de dígitos de π e uma tela de televisão antiga exibindo estática.
O código para reproduzir este estudo está, como sempre, disponível logo abaixo:
# pacotes necessarios
library(tidyverse)
theme_set(theme_bw())
# leitura dos dados
pi <- read.table(file="pi.dat", header = FALSE, colClasses = "character")
# converter as strings em numeros,
# criando um vetor de 1e6 posicoes
pi <- as.numeric(unlist(apply(pi, 2, strsplit, split="")))
# frequencia das casas decimais
table(pi)
# mapa de calor
pi.grid <- expand.grid(x=1:1000, y=1:1000)
pi.grid$digitos <- pi
ggplot(pi.grid, aes(x, y)) +
geom_raster(aes(fill = digitos)) +
scale_fill_continuous(breaks = seq(0, 9, 3)) +
labs(x="", y="", fill = "Dígitos")