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.