คำนวณ 500 หลักของ pi


25

เขียนโปรแกรมเพื่อคำนวณ 500 หลักแรกของ pi ตามกฎด้านล่าง:

  • ต้องมีความยาวน้อยกว่า 500 อักขระ
  • ไม่สามารถรวม "pi", "math.pi" หรือค่าคงที่ของ pi ที่คล้ายกันและไม่สามารถเรียกฟังก์ชันไลบรารีเพื่อคำนวณ pi
  • ไม่สามารถใช้ตัวเลข "3", "1" และ "4" ติดต่อกันได้
  • มันจะต้องดำเนินการในเวลาที่เหมาะสม (ต่ำกว่า 1 นาที) บนคอมพิวเตอร์ที่ทันสมัย

โปรแกรมที่สั้นที่สุดชนะ


วิธีตรวจสอบว่าตัวเลขของคุณถูกต้องหรือไม่: eveandersson.com/pi/digits
Nellius

เราอนุญาตให้พิมพ์มากกว่า 500 หลักด้วยการสูญเสียความถูกต้องหลังจาก 500 ครั้งแรกหรือไม่
Alexandru

@ Alexandru ฉันคิดเช่นนั้น แต่ฉันต้องการที่จะเห็นมันถูกตัดทอน
โทมัสโอ

@ Joey ไม่มีฟังก์ชั่นห้องสมุดในการคำนวณ PI - ฉันจะสมมติว่าคุณสามารถใช้สิ่งใดก็ได้จากไลบรารียกเว้นค่าคงที่ PI / ฟังก์ชัน
Aurel Bílý

1
เราสามารถใช้ไลบรารี่ HTTP เพื่อดาวน์โหลดเว็บไซต์ "digit of pi" ได้หรือไม่? ;-)
dan04

คำตอบ:


11

Golfscript - 29 ตัวอักษร

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

ฉันจะโพสต์การวิเคราะห์ในภายหลัง


5
คุณอธิบายได้ไหมว่ามันทำงานอย่างไร
โทมัสโอ

65
"ฉันจะโพสต์การวิเคราะห์ในภายหลัง" (รอ 3 ปี) ....
Justin

14
"ฉันจะโพสต์การวิเคราะห์ในภายหลัง" * รอนานกว่า 6 ปี *
Erik the Outgolfer

1
@EriktheOutgolfer ฉันจะโพสต์สิ่งนั้น : P
Christopher

1
"ฉันจะโพสต์การวิเคราะห์ในภายหลัง" (รอ 8 ปี)
Jono 2906

8

Mathematica (34 ตัวอักษร): (ไม่มี "การโกง" พร้อมตรีโกณมิติ)

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

ดังนั้นเพื่ออธิบายเวทมนตร์ที่นี่:
Integrate[function, lower, upper]ให้พื้นที่ใต้เส้นโค้ง "ฟังก์ชัน" จาก "ต่ำลง" ถึง "สูง" ในกรณีนี้ฟังก์ชันนั้นคือ[1-x^2]^.5ซึ่งเป็นสูตรที่อธิบายครึ่งบนของวงกลมที่มีรัศมี 1 เนื่องจากวงกลมมีรัศมี 1 จึงไม่มีค่า x ต่ำกว่า -1 หรือสูงกว่า 1 ดังนั้นเรากำลังค้นหาพื้นที่ครึ่งวงกลม เมื่อเราคูณด้วย 2 เราจะได้พื้นที่ภายในวงกลมรัศมี 1 ซึ่งเท่ากับ pi


บางทีคุณควรแทรกคำตอบเพื่ออธิบายว่าทำไมสิ่งนี้ถึงได้ผล (สำหรับคนที่ไม่ใช่คณิตศาสตร์)
Justin

ความคิดที่ยอดเยี่ยม ฉันจะเห็นมันในไม่ช้า ฉันจะอธิบายพื้นฐานของคณิตศาสตร์ที่เกี่ยวข้อง
Stack Tracer

บางทีคุณอาจย่อให้สั้นลงได้: เปลี่ยนsqrt[1-x^2]เป็น(1-x^2)^.5)
จัสติน

และฉันสามารถลบ * หลังจาก 2 Mathematica ได้อย่างยอดเยี่ยม
Stack Tracer


3

PARI / GP, 14

\p500
acos(-1)

คุณสามารถหลีกเลี่ยง trig โดยการแทนที่บรรทัดที่สองด้วย

gamma(.5)^2

หรือ

(6*zeta(2))^.5

หรือ

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

หรือ

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

หรือ

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

2

bc -l (บรรทัดคำสั่ง 22 = 5 + 17 โปรแกรม)

scale=500
4*a(1)

5
กฎบอกว่า "และอาจไม่เรียกฟังก์ชันไลบรารีเพื่อคำนวณ pi"
Peter Taylor

@ ปีเตอร์ปัญหาที่ฉันเดาคือ "ฟังก์ชั่นห้องสมุด" ไม่ได้เป็นคำที่กำหนดไว้เสมอและจะแย่ลงเมื่อคุณพูดว่า "to Pi" เพราะคุณสามารถใช้มันเพื่อคำนวณผลกลางเช่น Sqrt () ในคำตอบของ Alexandru
ดร. เบลิซาเรียส

ฉันคิดว่านี่เป็นการโกงเพราะ atan คำนวณ 1/4 pi แต่มันเป็นทางออกที่น่าสนใจอย่างไรก็ตาม
โทมัส O

1
@Thomas O: ถ้านี่คือการโกงวงเงินอยู่ที่ไหน?
JB


1

Python3 136

ใช้สูตรของ 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

ใช้นี้สูตร

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

Pyth , 21

u+/*GHhyHy^T500r^3T1Z

ใช้อัลกอริทึมนี้: pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))พบในความคิดเห็นของคำตอบ Golfscript


สิ่งนี้ไม่สมควรได้รับ downvote ...
Beta Decay

คำตอบนี้ไม่ถูกต้องมันสร้าง 34247779 ... ซึ่งสำหรับความรู้ของฉันไม่ได้เป็นปี่
orlp

@ orlp การrดำเนินการถูกเปลี่ยนไปเมื่อเร็ว ๆ นี้ในทางที่ทำลายคำตอบนี้ เปลี่ยน1เป็น a 0และจะทำงานใน Pyth ปัจจุบัน
isaacg

0

ความจริง 80 ไบต์

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

สำหรับการอ้างอิงhttps://tuts4you.com/download.php?view.452 ; มันจะเป็นการประมาณ 6 * arctg (1 / sqrt (3)) =% pi และมันจะใช้การขยายเซเรียอาสำหรับ 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.