计算pi的500位数字


25

编写一个程序来计算pi的前500位,并满足以下规则:

  • 长度必须少于500个字符。
  • 它不能包含“ pi”,“ math.pi”或类似的pi常量,也不能调用库函数来计算pi。
  • 它可能不会连续使用数字“ 3”,“ 1”和“ 4”。
  • 它必须在合理的时间内(不到1分钟)在现代计算机上执行。

最短的程序获胜。


要检查您的数字是否正确:eveandersson.com/pi/digits
Nellius 2011年

我们是否允许在打印前500个字符后打印500个以上的数字而导致准确性下降?
亚历山德鲁

@Alexandru,我想是的,但我希望看到它被截断。
Thomas O

@Joey没有库函数可以计算PI-我假设您可以使用库中除PI常量/函数之外的任何内容。
AurelBílý2011年

1
我们可以使用HTTP库下载“数字位数”网站吗?;-)
dan04 2011年

Answers:


11

Golfscript-29个字符

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

我稍后再发表分析


5
您能解释一下这是如何工作的吗?
Thomas O

65
“我将在以后发布分析”。(等待3年)。...–
贾斯汀

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)内的面积。


也许您应该在答案中插入一个解释为什么这样做的原因(对于非数学家而言)。
贾斯汀

好主意。我现在会看的。我将对所涉及的数学给出基本解释。
Stack Tracer 2014年

也许您可以缩短它:更改sqrt[1-x^2](1-x^2)^.5)
Justin

我可以在2之后删除*。Mathematica非常好。
Stack Tracer 2014年

4

Python(83个字符)

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)

您可以通过将第二行替换为来避免触发

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我猜的问题是,“库函数”并不总是一个定义明确的术语,只有当您说“计算Pi”时,它才会变得更糟,因为您可以使用它来计算中间结果,例如Sqrt()在亚历山德鲁的回答。
belisarius博士2011年

我认为这是作弊的,因为atan可以计算1/4 pi,但这仍然是一个有趣的解决方案。
Thomas 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

Mathematica-50

½ = 1/2; 2/Times @@ FixedPointList[(½ + ½ #)^½~N~500 &, ½^½]

1

佩斯 21

u+/*GHhyHy^T500r^3T1Z

使用以下算法: pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))在Golfscript答案的注释中找到。


这不值得一票...
Beta Decay

这个答案是错误的,它生成34247779 ...据我所知,它不是pi。
orlp 2015年

@orlp r最近更改了该操作,从而破坏了此答案。将更1改为0,它将在当前Pyth中起作用。
isaacg 2015年

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使用serie扩展

  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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.