Pi'nin 500 basamağını hesapla


25

Pi'nin ilk 500 basamağını hesaplamak için bir program yazınız:

  • Uzunluğu 500 karakterden az olmalıdır.
  • "Pi", "math.pi" veya benzer pi sabitlerini içeremez ve pi'yi hesaplamak için bir kütüphane işlevini çağırmaz.
  • "3", "1" ve "4" rakamlarını arka arkaya kullanamaz.
  • Modern bir bilgisayarda makul bir sürede (1 dakikadan az) yürütülmelidir.

En kısa program kazanır.


Basamaklarınızın doğru olup olmadığını kontrol etmek için: eveandersson.com/pi/digits
Nellius

İlk 500'den sonra doğruluk kaybıyla 500'den fazla rakam yazdırabilir miyiz?
Alexandru,

@Alexandru, sanırım öyle ama kesilmiş görmeyi tercih ederim.
Thomas O,

@Joey hiçbir kütüphane işlevi PI HESAPLAMAK İÇİN - PI sabiti / işlevi dışında kütüphanelerden herhangi bir şey kullanabileceğinizi varsayardım.
Aurel Bílý

1
"Pi sayısı" web sitesini indirmek için bir HTTP kütüphanesi kullanabilir miyiz? ;-)
dan04 17:11

Yanıtlar:


11

Golfscript - 29 karakter

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

Sonra analiz gönderirim


5
Bunun nasıl çalıştığını açıklayabilir misiniz?
Thomas O,

65
"Sonradan analiz göndereceğim". (3 yıl bekler) ....
Justin,

14
"Sonradan analiz göndereceğim" * 6 yıldan fazla bekler *
Outgolfer Erik

1
@EriktheOutgolfer Bunu gönderecektim. : P
Christopher

1
"Sonradan analiz göndereceğim" (8 yıl bekler)
Jono 2906

8

Mathematica (34 karakter): (trig ile "hile yapmadan")

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

Bu yüzden, buradaki sihri açıklamak için:
Integrate[function, lower, upper]"fonksiyon" eğrisinin altındaki alanı "alt" dan "üst" e verir. Bu durumda, bu işlev, [1-x^2]^.5yarıçapı 1 olan bir dairenin üst yarısını tanımlayan bir formüldür. Daire, 1 yarıçapına sahip olduğundan, -1'den küçük veya 1'den yüksek x değerleri için yoktur. Bu nedenle, bir dairenin yarısının alanını buluyoruz. 2 ile çarptığımızda, alanı yarıçapı 1 olan bir dairenin içine alırız ki bu da pi'ye eşittir.


Belki de cevabınıza, bunun neden işe yaradığının bir açıklamasını eklemelisiniz (onlar için matematiksiz insanlar).
Justin,

Harika fikir. Şimdilik göreceğim. İlgili matematiğin temel bir açıklamasını vereceğim.
Stack Tracer

Değişikliği: Belki de sen kısaltabilir sqrt[1-x^2]için(1-x^2)^.5)
Justin

ve 2'den sonra * işaretini kaldırabilirim. Mathematica harika.
Stack Tracer

4

Python (83 karakter)

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)

İkinci çizgiyi değiştirerek trig işaretinden kaçınabilirsiniz.

gamma(.5)^2

veya

(6*zeta(2))^.5

veya

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

veya

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

veya

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

2

bc -l (22 = 5 komut satırı + 17 program)

scale=500
4*a(1)

5
Kurallar "pi'yi hesaplamak için bir kütüphane işlevini de çağırmaz" der.
Peter Taylor

@Peter Sanırım sorun şu ki, "kütüphane işlevi" her zaman iyi tanımlanmış bir terim değildir ve yalnızca "Pi'yi hesaplamak" derken daha da kötüye gider, çünkü ara sonuçları hesaplamak için kullanabilirsiniz, örneğin Sqrt () Alexandru'nun cevabında.
Dr. Belisarius

Bence bu hile yapıyor çünkü atan 1/4 pi hesaplar ama yine de ilginç bir çözüm.
Thomas O

1
@ Tomo O: eğer hile yapıyorsa, limit nerede?
JB


1

Python3 136

Madhava'nın formülünü kullanır .

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

Bu formülü kullanır .

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

Bu algoritmayı kullanır: pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))Golfscript cevabının yorumlarında bulunur.


Bu bir aşağı oy hak etmiyor ...
Beta Decay

Bu cevap yanlıştır, 34247779 üretir ... ki bu benim bilgime göre pi değil.
orlp

@orlp rİşlem yakın zamanda bu yanıtı bozacak şekilde değiştirildi. Değişim 1bir etmek 0ve mevcut Pyth çalışacaktır.
27a15'de isaacg,

0

Aksiyom, 80 bayt

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

referans için https://tuts4you.com/download.php?view.452 ; 6 * arctg (1 / sqrt (3)) =% pi değerine eşittir ve arctg için seri genişlemesini kullanır.

  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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.