O desafio
Você deve calcular pi no menor comprimento possível. Qualquer idioma é bem-vindo, e você pode usar qualquer fórmula para calcular pi. Ele deve ser capaz de calcular pi com pelo menos 5 casas decimais. O menor, seria medido em caracteres. A competição dura 48 horas. Início.
Nota : Essa pergunta semelhante afirma que o PI deve ser calculado usando a série 4 * (1 - 1/3 + 1/5 - 1/7 +…). Esta pergunta não possui essa restrição e, de fato, muitas respostas aqui (incluindo as que têm maior probabilidade de ganhar) seriam inválidas nessa outra pergunta. Portanto, isso não é uma duplicata.
code-golf
pi
approximation
Poseidon
fonte
fonte
Respostas:
Python3, 7
Executa no shell interativo
Saída:
3.1415929203539825
corrija até 6 casas decimaisE, finalmente, tenho uma solução que supera o APL!
Ah, e no caso de você estar se perguntando, essa proporção é chamada de 密 率 (literalmente "proporção precisa") e é proposta pelo matemático chinês Zu Chongzhi (429-500 dC). Um artigo relacionado da Wikipedia pode ser encontrado aqui . Zu também forneceu a relação 22/7 como a "relação aproximada" e é conhecido por ser o primeiro matemático a propor que 3,1415926 <= pi <= 3,1415927
fonte
355/113
. Menor votou resposta:3+.14159
. Na verdade, não vejo muita diferença.PHP -
132127125124 bytesSimulação básica de Monte-Carlo. A cada 10 milhões de iterações, ele imprime o status atual:
Obrigado a cloudfeet e zamnuts por sugestões!
Saída de amostra:
fonte
$j+=$x*$x+$y*$y<=1;
que economizaria quatro bytes.$k+=1/4;
eprint $j/$k
pode ser reduzido para$k++;
eprint 4*$j/$k
para outro byte.J 6
Explicação:
*.
fornece o comprimento e o ângulo de um número complexo. O ângulo de -1 é pi.{:
pega o final da lista [comprimento, ângulo]Apenas para os fetiche por séries de convergência lenta, por 21 bytes, uma série de Leibniz:
fonte
atan(0) + pi
. Não acho que o uso de funções trigonométricas e o próprio pi devam contar como um "cálculo".Arg
(isto é, o argumento de um número complexo) não é uma função trigonométrica, apesar de ter valores semelhantes aos de arco tangenteatan(0) + pi
.Perl, 42 bytes
Ele calcula π usando a fórmula de Leibniz :
999999 é usado como o maior n para obter a precisão de cinco dígitos decimais.
Resultado:
3.14159165358977
fonte
Piet, muitos codéis
Não é minha resposta, mas esta é a melhor solução que já vi para esse problema:
Meu entendimento é que ele soma os pixels do círculo e divide pelo raio, e depois novamente. Isso é:
Uma abordagem melhor em minha mente é um programa que gera essa imagem em um tamanho arbitrário e a executa através de um intérprete Piet.
Fonte: http://www.dangermouse.net/esoteric/piet/samples.html
fonte
Tecnicamente estou calculando, 9
Tecnicamente, ainda estou calculando, 10
Estou calculando tão difícil, 8
ACIDENTEMENTE PI, 12
E tecnicamente, essa resposta é ruim.
fonte
APL - 6
Saídas
3.141592654
. Ele calcula o dobro do arco de seno de 1.Uma solução de 13 caracteres seria:
Isso gera
3.141591654
para mim, que se ajusta à precisão solicitada.No
+ 4/1 - 4/3 + 4/5 - 4/7 ...
entanto, ele usa as séries simples para calcular.fonte
¯2○¯1
?” (Ie acos -1). Mas isso dá uma aproximação complexa em repl.it (3.1415926425236J¯1.1066193467303274e¯8
). Alguma idéia do porquê? Todas as implementações fazem isso?2 * asin(1)
é um pouco trapaceiro, no entanto.sqrt(1-theta^2)
(que aparece em muitas identidades trigonométricas) em algum momento e perdeu alguma precisão em algum lugar, terminando com um pouco negativo1-theta^2
.acos -0.75
. Não há como calcular1 - 0.75 ^ 2
como negativo.J - 5 bytes
Isto significa
|log(-1)|
.fonte
ln(e^(42*pi))/42
oupi*113/113
.Calculadora do Google, 48
Toma um pedaço de manteiga, faz cálculos avançados, faz pi com isso. Imaginei que, como todo mundo estava fazendo respostas matemáticas simples, eu adicionaria uma mais leve.
Exemplo
fonte
stick of butter
é fofo e engraçado, mas essa é essencialmente mais umapi*x/x+y-y
identidade algébrica.Oitava, 31
Calcula a área de um quarto de círculo com raio 2, através da integração numérica.
fonte
Mathematica 6
fonte
Python, 88
Solução:
Exemplo de saída no shell Python:
Consegue evitar importações. Pode ser facilmente trocado para usar a biblioteca Decimal de precisão arbitrária; apenas substitua
3.
porDecimal('3')
, defina a precisão antes e depois e, em seguida, unário mais o resultado para converter a precisão.E ao contrário de um lote inteiro das respostas aqui, na verdade, calcula π em vez de confiar em built-in constantes ou fakery matemática, ou seja
math.acos(-1)
,math.radians(180)
, etc.fonte
linguagem assembly x86 (5 caracteres)
Se isso carrega uma constante da ROM ou realmente calcula a resposta, depende do processador (mas, pelo menos em algumas, ele efetua um cálculo, não apenas carregando o número da ROM). Para colocar as coisas em perspectiva, ele é listado como tendo 40 ciclos de clock em um 387, o que é um pouco mais do que parece fazer sentido se ele estivesse carregando o valor da ROM.
Se você realmente deseja garantir um cálculo, pode fazer algo como:
[para 27 caracteres]
fonte
fldpi
?asin(-1)
nemfldpi
são particularmente interessantes ou criativos. Não há muito objetivo em competir para ver qual idioma favorito tem o nome mais curto para funções trigonométricas e constantes pi predefinidas.bc -l, 37 bytes
Não vejo nenhuma outra resposta usando o produto Wallis , então, desde que recebeu o nome do meu homônimo (meu professor de História da Matemática recebeu um grande impulso disso), não pude resistir.
Acontece que é um algoritmo bastante bom da perspectiva do golfe, mas sua taxa de convergência é péssima - chegando a 1 milhão de iterações apenas para obter 5 casas decimais:
bc -l, 15 bytes
Como alternativa, podemos usar Newton-Raphson para resolver
sin(x)=0
, com uma aproximação inicial de 3. Como isso converge em tão poucas iterações, simplesmente codificamos duas iterações, o que fornece 10 casas decimais:A fórmula iterativa de acordo com Newton-Raphson é:
sin'
===cos
ecos(pi)
===-1
, simplesmente aproximamos ocos
termo para obter:Resultado:
fonte
Pitão -
4745pi está realmente sendo calculado sem funções trigonométricas ou constantes.
resultado:
fonte
C, 99
Calcula diretamente a área / r ^ 2 de um círculo.
Esta função calculará pi contando o número de pixels em um círculo de raio e
r
depois dividindo porr*r
(na verdade, apenas calcula um quadrante). Comr
10000, é preciso ter 5 casas decimais (3,1415904800). Os parâmetros para a função são ignorados, eu apenas os declarei lá para economizar espaço.fonte
Javascript,
4336x
tornazeta(2)=pi^2/6
- se assimsqrt(6*x)=pi
. (47 caracteres)Depois de usar a propriedade distributiva e excluir os colchetes do
for
loop, você obtém:(43 caracteres)
Retorna:
Editar:
Encontrei uma maneira ainda mais curta usando o produto Wallis:
(36 caracteres)
Retorna:
fonte
Python, Riemann zeta (
5841 caracteres)Ou poupe dois caracteres, mas use scipy
Editar : salvou 16 (!) Caracteres graças a amcgregor
fonte
math
importação esqrt
chamada girando a exponenciação em vez disso:(6*sum(n**-2 for n in range(1,9**9)))**0.5
Javascript: 99 caracteres
Usando a fórmula dada por Simon Plouffe em 1996, isso funciona com 6 dígitos de precisão após o ponto decimal:
Essa variante mais longa (130 caracteres) tem uma precisão melhor, 15 dígitos após o ponto decimal:
Fiz isso com base nas minhas duas respostas a esta pergunta .
fonte
Rubi,
5450.49.Versão online para teste.
Outra versão sem criar uma matriz (50 caracteres):
Versão online para teste.
fonte
a=__import__;reduce(a('operator').__add__,a('itertools').imap(lambda e:(-1.0)**e/(2*e+1)*4,xrange(9**6)))
- observe o uso de xrange / imap; no Python 3 você pode evitar isso; basicamente, não quero que toda a sua memória RAM seja consumida construindo uma lista com tantas entradas.TI CAS, 35
fonte
Perl - 35 bytes
Produz precisão total de ponto flutuante. Uma derivação da fórmula usada pode ser vista em outro lugar .
Uso da amostra:
Versão de Precisão Arbitrária
Estenda conforme necessário. O comprimento da iteração (por exemplo
-329..-1
) deve ser ajustado para ser aproximadamente log 2 (10) ≈ 3.322 vezes o número de dígitos.Ou, usando
bigint
:Isso é notavelmente mais rápido, mas não inclui um ponto decimal.
fonte
C # 192
Saídas:
Nenhuma matemática envolvida. Apenas consulta a versão atual do TeX e faz algumas análises primitivas do html resultante. Eventualmente, ele se tornará π de acordo com a Wikipedia .
fonte
Python 3 Monte Carlo (103 caracteres)
fonte
Linguagem do Game Maker, 34
Assume todas as variáveis não inicializadas como 0. Isso é padrão em algumas versões do Game Maker.
Resultado:
fonte
float k(){double x=0,i=0;for(;i++<999999;)x+=6/i/i;return sqrt(x);}
é menor do que este1e8
em vez de 999999for(i=1;i<1e8;)x+=6/i/i++;sqrt(x)
para salvar um byte (ou como alternativafor(i=1;i++<1e8;)
)?Java -
8355Versão mais curta graças ao Navin.
Versão antiga:
fonte
180
porpi/180
.R : 33 caracteres
Espero que isso siga as regras.
fonte
Ruby, 82
Usa uma fórmula que eu realmente não entendo e apenas copio. : P
Resultado:
3.1415926535897913
fonte
Ruby, 12
Eu estou tecnicamente "cálculo"
piuma aproximação do pi.fonte
acos(-1)
.JavaScript - 19 bytes
Calcula a 9ª raiz de 29809 .
fonte