Calcular 500 dígitos de pi


25

Escriba un programa para calcular los primeros 500 dígitos de pi, cumpliendo con las siguientes reglas:

  • Debe tener menos de 500 caracteres de longitud.
  • No puede incluir "pi", "math.pi" o constantes pi similares, ni puede llamar a una función de biblioteca para calcular pi.
  • No puede usar los dígitos "3", "1" y "4" consecutivamente.
  • Debe ejecutarse en un tiempo razonable (menos de 1 minuto) en una computadora moderna.

El programa más corto gana.


Para verificar si sus dígitos son correctos: eveandersson.com/pi/digits
Nellius

¿Se nos permite imprimir más de 500 dígitos con pérdida de precisión después de los primeros 500?
Alexandru

@Alexandru, supongo que sí, pero preferiría verlo truncado.
Thomas O

@Joey no tiene funciones de biblioteca PARA CALCULAR PI - Supongo que puede usar cualquier cosa de las bibliotecas, excepto la constante / función PI.
Aurel Bílý

1
¿Podemos usar una biblioteca HTTP para descargar un sitio web de "dígitos de pi"? ;-)
dan04

Respuestas:


11

Golfscript - 29 caracteres

6666,-2%{2+.2/@*\/9)499?2*+}*

Publicaré el análisis más tarde


55
¿Podría explicar cómo funciona esto?
Thomas O

65
"Publicaré el análisis más tarde". (espera 3 años) ....
Justin

14
"Publicaré el análisis más tarde" * espera más de 6 años *
Erik the Outgolfer

1
@EriktheOutgolfer Iba a publicar eso. : P
Christopher

1
"Publicaré el análisis más tarde" (espera 8 años)
Jono 2906

8

Mathematica (34 caracteres): (sin "trampa" con trigonometría)

N[2Integrate[[1-x^2]^.5,-1,1],500]

Entonces, para explicar la magia aquí:
Integrate[function, lower, upper]le da el área bajo la curva "función" de "inferior" a "superior". En este caso, esa función es [1-x^2]^.5, que es una fórmula que describe la mitad superior de un círculo con radio 1. Debido a que el círculo tiene un radio de 1, no existe para valores de x inferiores a -1 o superiores a 1. Por lo tanto, estamos encontrando el área de la mitad de un círculo. Cuando multiplicamos por 2, obtenemos el área dentro de un círculo de radio 1, que es igual a pi.


Tal vez debería insertar, en su respuesta, una explicación de por qué esto funciona (para ellos no son matemáticos).
Justin

maravillosa idea. Lo veré en el presente. Daré una explicación básica de las matemáticas involucradas.
Stack Tracer

Tal vez podría acortarlo: cambie sqrt[1-x^2]a(1-x^2)^.5)
Justin

y puedo eliminar el * después del 2. Mathematica es maravilloso.
Stack Tracer

4

Python (83 caracteres)

P=0
B=10**500
i=1666
while i:d=2*i+1;P=(P*i%B+(P*i/B+3*i)%d*B)/d;i-=1
print'3.%d'%P

3

PARI / GP, 14

\p500
acos(-1)

Puede evitar trigonometría reemplazando la segunda línea con

gamma(.5)^2

o

(6*zeta(2))^.5

o

psi(3/4)-psi(1/4)

o

4*intnum(x=0,1,(1-x^2)^.5)

o

sumalt(k=2,(-1)^k/(2*k-3))*4

2

bc -l (22 = 5 línea de comando + 17 programa)

scale=500
4*a(1)

55
Las reglas dicen "ni puede llamar a una función de biblioteca para calcular pi".
Peter Taylor

@Peter El problema, supongo, es que "función de biblioteca" no siempre es un término bien definido, y solo empeora cuando dice "calcular Pi", ya que puede usarlo para calcular resultados intermedios, por ejemplo Sqrt () en la respuesta de Alexandru.
Dr. belisarius

Creo que esto es trampa porque atan calcula 1/4 pi pero es una solución interesante.
Thomas O

1
@ Thomas O: si esto es trampa, ¿dónde está el límite?
JB


1

Python3 136

Utiliza la fórmula de Madhava .

from decimal import *
D=Decimal
getcontext().prec=600
p=D(3).sqrt()*sum(D(2-k%2*4)/3**k/(2*k+1)for k in range(1100))
print(str(p)[:502])

Python3 164

Utiliza esta fórmula.

from decimal import *
D=Decimal
getcontext().prec=600
p=sum(D(1)/16**k*(D(4)/(8*k+1)-D(2)/(8*k+4)-D(1)/(8*k+5)-D(1)/(8*k+6))for k in range(411))
print(str(p)[:502])

1

Mathematica - 50

½ = 1/2; 2/Times @@ FixedPointList[(½ + ½ #)^½~N~500 &, ½^½]

1

Pyth , 21

u+/*GHhyHy^T500r^3T1Z

Utiliza este algoritmo: pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))encontrado en los comentarios de la respuesta Golfscript.


Esto no merece un voto negativo ...
Beta Decay

Esta respuesta es incorrecta, genera 34247779 ... que, que yo sepa, no es pi.
orlp

@orlp La roperación se modificó recientemente de una manera que rompió esta respuesta. Cambie 1a a 0, y funcionará en Pyth actual.
isaacg

0

Axioma, 80 bytes

digits(503);v:=1./sqrt(3);6*reduce(+,[(-1)^k*v^(2*k+1)/(2*k+1)for k in 0..2000])

para referencia https://tuts4you.com/download.php?view.452 ; sería una aplicación cruzada a 6 * arctg (1 / sqrt (3)) =% pi y usaría la expansión de serie para arctg

  3.1415926535 8979323846 2643383279 5028841971 6939937510 5820974944 592307816
  4 0628620899 8628034825 3421170679 8214808651 3282306647 0938446095 505822317
  2 5359408128 4811174502 8410270193 8521105559 6446229489 5493038196 442881097
  5 6659334461 2847564823 3786783165 2712019091 4564856692 3460348610 454326648
  2 1339360726 0249141273 7245870066 0631558817 4881520920 9628292540 917153643
  6 7892590360 0113305305 4882046652 1384146951 9415116094 3305727036 575959195
  3 0921861173 8193261179 3105118548 0744623799 6274956735 1885752724 891227938
  1 8301194913 01

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.