Calculez 500 chiffres de pi


25

Écrivez un programme pour calculer les 500 premiers chiffres de pi, en respectant les règles ci-dessous:

  • Il doit comporter moins de 500 caractères.
  • Il ne peut pas inclure "pi", "math.pi" ou des constantes pi similaires, ni appeler une fonction de bibliothèque pour calculer pi.
  • Il ne peut pas utiliser les chiffres "3", "1" et "4" consécutivement.
  • Il doit s'exécuter dans un délai raisonnable (moins de 1 minute) sur un ordinateur moderne.

Le programme le plus court gagne.


Pour vérifier si vos chiffres sont corrects: eveandersson.com/pi/digits
Nellius

Sommes-nous autorisés à imprimer plus de 500 chiffres avec une perte de précision après les 500 premiers?
Alexandru

@Alexandru, je suppose que oui, mais je préférerais le voir tronqué.
Thomas O

@Joey pas de fonctions de bibliothèque POUR CALCULER PI - Je suppose que vous pouvez utiliser n'importe quoi dans les bibliothèques sauf la constante / fonction PI.
Aurel Bílý

1
Pouvons-nous utiliser une bibliothèque HTTP pour télécharger un site Web "chiffres de pi"? ;-)
dan04

Réponses:


11

Golfscript - 29 caractères

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

Je posterai l'analyse plus tard


5
Pourriez-vous expliquer comment cela fonctionne?
Thomas O

65
"Je posterai l'analyse plus tard". (attend 3 ans) ....
Justin

14
"Je publierai une analyse plus tard" * attend plus de 6 ans *
Erik the Outgolfer

1
@EriktheOutgolfer J'allais poster ça. : P
Christopher

1
"Je posterai l'analyse plus tard" (attend 8 ans)
Jono 2906

8

Mathematica (34 caractères): (sans "tricher" avec trig)

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

Donc, pour expliquer la magie ici:
Integrate[function, lower, upper]vous donne l'aire sous la courbe "fonction" de "inférieur" à "supérieur". Dans ce cas, cette fonction est [1-x^2]^.5, qui est une formule qui décrit la moitié supérieure d'un cercle de rayon 1. Étant donné que le cercle a un rayon de 1, il n'existe pas pour les valeurs de x inférieures à -1 ou supérieures à 1. Par conséquent, nous trouvons l'aire de la moitié d'un cercle. Lorsque nous multiplions par 2, nous obtenons alors l'aire à l'intérieur d'un cercle de rayon 1, qui est égal à pi.


Vous devriez peut-être insérer, dans votre réponse, une explication de la raison pour laquelle cela fonctionne (pour les non-maths).
Justin

merveilleuse idée. Je vais m'en occuper tout de suite. Je vais donner une explication de base des mathématiques impliquées.
Stack Tracer

Peut-être pourriez-vous le raccourcir: changer sqrt[1-x^2]pour(1-x^2)^.5)
Justin

et je peux supprimer le * après le 2. Mathematica est merveilleux.
Stack Tracer

4

Python (83 caractères)

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)

Vous pouvez éviter le trig en remplaçant la deuxième ligne par

gamma(.5)^2

ou

(6*zeta(2))^.5

ou

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

ou

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

ou

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

2

bc -l (22 = 5 ligne de commande + 17 programme)

scale=500
4*a(1)

5
Les règles disent "ni appeler une fonction de bibliothèque pour calculer pi".
Peter Taylor

@Peter Le problème, je suppose, est que "fonction de bibliothèque" n'est pas toujours un terme bien défini, et il ne fait qu'empirer lorsque vous dites "calculer Pi", car vous pouvez l'utiliser pour calculer des résultats intermédiaires, par exemple Sqrt () dans la réponse d'Alexandru.
Dr belisarius

Je pense que c'est de la triche car atan calcule 1/4 pi mais c'est quand même une solution intéressante.
Thomas O

1
@Thomas O: si c'est de la triche, où est la limite?
JB


1

Python3 136

Utilise la formule 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

Utilise cette formule.

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

Utilise cet algorithme: pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))trouvé dans les commentaires de la réponse Golfscript.


Cela ne mérite pas un downvote ...
Beta Decay

Cette réponse est incorrecte, elle génère 34247779 ... qui, à ma connaissance, n'est pas pi.
orlp

@orlp L' ropération a été récemment modifiée d'une manière qui a brisé cette réponse. Changez le 1en a 0, et cela fonctionnera dans le Pyth actuel.
isaacg

0

Axiome, 80 octets

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

pour référence https://tuts4you.com/download.php?view.452 ; ce serait une appréciation à 6 * arctg (1 / sqrt (3)) =% pi et il utiliserait l'expansion de la série pour 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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.