Calcola 500 cifre di pi


25

Scrivi un programma per calcolare le prime 500 cifre di pi, rispettando le seguenti regole:

  • Deve contenere meno di 500 caratteri.
  • Non può includere "pi", "math.pi" o costanti pi simili, né può chiamare una funzione di libreria per calcolare pi.
  • Non può usare le cifre "3", "1" e "4" consecutivamente.
  • Deve essere eseguito in un tempo ragionevole (meno di 1 minuto) su un computer moderno.

Vince il programma più breve.


Per verificare se le cifre sono corrette: eveandersson.com/pi/digits
— Nellius

Siamo autorizzati a stampare più di 500 cifre con perdita di precisione dopo le prime 500?
— Alexandru,

@Alexandru, suppongo di sì, ma preferirei vederlo troncato.
— Thomas O

@Joey nessuna funzione di libreria PER CALCOLARE PI - Suppongo che tu possa usare qualsiasi cosa dalle librerie tranne la costante / funzione PI.
— Aurel Bílý,

1
Possiamo usare una libreria HTTP per scaricare un sito Web "cifre di pi"? ;-)
— dan04,

Risposte:



8

Mathematica (34 caratteri): (senza "barare" con il trigantino)

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

Quindi, per spiegare la magia qui:
Integrate[function, lower, upper]ti dà l'area sotto la curva "funzione" da "inferiore" a "superiore". In questo caso, quella funzione è [1-x^2]^.5, che è una formula che descrive la metà superiore di un cerchio con raggio 1. Poiché il cerchio ha un raggio di 1, non esiste per valori di x inferiori a -1 o superiori a 1. Pertanto, stiamo trovando l'area della metà di un cerchio. Quando moltiplichiamo per 2, otteniamo l'area all'interno di un cerchio di raggio 1, che è uguale a pi.


Forse dovresti inserire, nella tua risposta, una spiegazione del perché questo funziona (per loro gente non matematica).
— Giustino,

idea meravigliosa. Ci penserò subito. Darò una spiegazione di base della matematica in questione.
— Stack Tracer,

Forse potresti accorciarlo: cambia sqrt[1-x^2]in(1-x^2)^.5)
— Giustino il

e posso rimuovere il * dopo il 2. Mathematica è meravigliosa.
— Stack Tracer,

4

Python (83 caratteri)

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)

È possibile evitare il trigger sostituendo la seconda riga 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 riga di comando + programma 17)

scale=500
4*a(1)

5
Le regole dicono "né può chiamare una funzione di libreria per calcolare pi".
— Peter Taylor,

@Peter Il problema, suppongo, è che "funzione di libreria" non è sempre un termine ben definito, e peggiora solo quando dici "calcolare Pi", poiché puoi usarlo per calcolare risultati intermedi, ad esempio Sqrt () nella risposta di Alexandru.
— Dr. belisarius,

Penso che questo sia un imbroglio perché atan calcola 1/4 pi ma è comunque una soluzione interessante.
— Thomas O,

1
Thomas O: se questo è barare, dov'è il limite?
— JB


1

Python3 136

usi la formula di 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

Usa questa formula.

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

Utilizza questo algoritmo: pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))trovato nei commenti della risposta Golfscript.


Questo non merita un downvote ...
— Decadimento beta

Questa risposta non è corretta, genera 34247779 ... che, per quanto ne sappia, non è pi.
— orlp,

@orlp L' roperazione è stata recentemente modificata in un modo che ha rotto questa risposta. Cambia 1in a 0, e funzionerà nel Pyth corrente.
— isaacg,

0

Assioma, 80 byte

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

per riferimento https://tuts4you.com/download.php?view.452 ; sarebbe un'approssimazione a 6 * arctg (1 / sqrt (3)) =% pi e userebbe l'espansione serie per 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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.