Pi está errado
Um método comum de calcular pi é jogar "dardos" em uma caixa 1x1 e ver qual área do círculo de unidades é comparada ao total lançado:
loop
x = rand()
y = rand()
if(sqrt(x*x + y*y) <= 1) n++
t++
pi = 4.0*(n/t)
Escreva um programa que pareça que ele deveria calcular corretamente pi (usando este ou outros métodos comuns de computação de pi), mas calcula tau (tau = 2 * pi = 6.283185307179586 ...). Seu código deve produzir pelo menos as 6 primeiras casas decimais: 6.283185
O vencedor é coroado em 6 de junho (uma semana a partir de hoje).
popularity-contest
underhanded
pi
Kyle Kanos
fonte
fonte
1
mas retorna2
. Quem estamos enganando aqui?Respostas:
Javascript
Ajuda, estou preso em uma fábrica do universo e não tenho certeza do que estou fazendo.
Math.atan2
deve retornar pi com bons valores, certo?Math.atan2(0, -0)
retorna pi, então, se eu subtraí-lo e adicioná-lo, ainda devo ter pi.fonte
π - (-π)
>>> 0 === -0 ;true ;>>> Math.atan2(0, 0) ;0 ;>>> Math.atan2(0, -0) ;3.141592653589793
BASIC
(Mais especificamente, Chipmunk Basic )
Isso usa uma série infinita descoberta por Nilakantha Somayaji no século XV:
Saída
Se você não consegue descobrir o que está acontecendo, aqui estão algumas dicas:
e
fonte
i
é igualfalse
? E então você adiciona2
a ele? E funciona ???i == false
que é semelhante ai == 0
. O ponto é que o valor inicial para o acumuladorpi
não é 0 ...false + 2 == 2
: Dbool
tipo e usa0
diferente de zero para representarfalse
etrue
repsectivamente. Não que seja elegante, mas, ei, é assim que funciona.C - O comprimento de meio círculo unitário
Uma maneira de calcular π é simplesmente medir a distância que o ponto
(1, 0)
viaja ao girar em torno da origem, uma(-1, 0)
vez que será metade da circunferência de um círculo unitário (que é 2π ).No entanto, nenhum
sin(x)
oucos(x)
é necessária uma vez que isso pode ser feito por pisar todo o caminho em torno da origem e adicionando a distância do ponto viaja para cada etapa . Quanto menor o tamanho de cada etapa, mais preciso será o π .Nota: O passo terminará quando y estiver abaixo de zero (que é exatamente quando passa
(-1, 0)
).Ele fornece a seguinte saída:
fonte
length
macro está faltando um sqrt. Isso é pretendido?x
ey
também são trocados entre a definição e chamada (sem efeito)sqrt
foi acidentalmente omitido para que o valor de pi fosse impresso em 6,28 ... Também +1 para perceberx
e oy
que não percebi!C
(Isso acabou sendo mais longo do que o pretendido, mas eu o publicarei de qualquer maneira ...)
No século XVII, Wallis publicou uma série infinita para Pi:
(Consulte Novos produtos infinitos do tipo Wallis e catalão para π, e e √ (2 + √2) para obter mais informações)
Agora, para calcular Pi, primeiro devemos multiplicar por dois para fatorar o denominador:
Minha solução calcula as séries infinitas para Pi / 2 e dois e multiplica os dois valores juntos. Observe que produtos infinitos são incrivelmente lentos para convergir ao calcular valores finais.
saída:
fonte
Java - Nilakantha Series
A Série Nilakantha é apresentada como:
Assim, para cada termo, o denominador é construído pela multiplicação de números inteiros consecutivos, com o início aumentando em 2 a cada termo. Observe que você adiciona / subtrai termos alternativos.
Após quinhentos termos, obtemos uma estimativa razoável de pi:
fonte
C ++: Madhava de Sangamagrama
Esta série infinita agora é conhecida como Madhava-Leibniz :
Comece com a raiz quadrada de 48 e multiplique pelo resultado da soma de (-3) -k / (2k + 1). Muito direto e simples de implementar:
Saída:
fonte
Python - Uma alternativa à série Nilakantha
Esta é outra série infinita para calcular pi que é bastante fácil de entender.
Para esta fórmula, pegue 6 e comece a alternar entre adicionar e subtrair frações com numeradores de 2 e denominadores que são o produto de dois números inteiros consecutivos e sua soma. Cada fração subsequente inicia seu conjunto de números inteiros aumentando em 1. Realize isso algumas vezes e os resultados ficam bastante próximos de pi.
o que dá 6.283185.
fonte
Math.h:
Saída: 6.28
#include "Math.h" não é o mesmo que #include, mas apenas olhando o arquivo principal, quase ninguém pensaria em verificar. Óbvio, talvez, mas um problema semelhante apareceu em um projeto no qual eu estava trabalhando e passou despercebido por um longo tempo.
fonte