Рассчитать 500 цифр пи

25

Напишите программу для вычисления первых 500 цифр числа Пи, соблюдая следующие правила:

  • Длина должна быть не более 500 символов.
  • Он не может включать в себя «pi», «math.pi» или подобные константы pi, а также не может вызывать библиотечную функцию для вычисления pi.
  • Он не может использовать цифры «3», «1» и «4» последовательно.
  • Он должен выполняться за разумное время (до 1 минуты) на современном компьютере.

Самая короткая программа выигрывает.

Томас О
источник
Чтобы проверить, верны ли ваши цифры: eveandersson.com/pi/digits
Неллиус
Разрешено ли печатать более 500 цифр с потерей точности после первых 500?
Александру
@Alexandru, я так думаю, но я бы предпочел, чтобы оно было обрезанным.
Томас О
@ Джой, нет библиотечных функций ДЛЯ РАСЧЕТА PI - я бы предположил, что вы можете использовать что угодно из библиотек, кроме константы / функции PI.
Aurel Bílý
1
Можем ли мы использовать HTTP-библиотеку для загрузки веб-сайта «цифры пи»? ;-)
dan04

Ответы:

11

Гольфскрипт - 29 символов

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

Позже выложу анализ

gnibbler
источник
5
Не могли бы вы объяснить, как это работает?
Томас О
65
«Я опубликую анализ позже». (ждет 3 года) ....
Джастин
14
«Я опубликую анализ позже» * ждет более 6 лет *
Эрик Outgolfer
1
@EriktheOutgolfer Я собирался опубликовать это. : P
Кристофер
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, равную пи.

Stack Tracer
источник
Возможно, вы должны вставить в свой ответ объяснение того, почему это работает (для них не математики).
Джастин
прекрасная идея Я позабочусь об этом сейчас. Я дам базовое объяснение математики.
Stack Tracer
Может быть, вы могли бы сократить его: изменить sqrt[1-x^2]на(1-x^2)^.5)
Джастин
и я могу удалить * после 2. Mathematica замечательна.
Stack Tracer
4

Питон (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
Правила гласят: «И при этом она не может вызывать библиотечную функцию для вычисления числа пи».
Питер Тейлор
@Peter Проблема, я думаю, в том, что «библиотечная функция» не всегда является четко определенным термином, и это только ухудшается, когда вы говорите «вычислить Pi», так как вы можете использовать его для вычисления промежуточных результатов, например Sqrt () в ответе Александру.
Доктор Велизарий
Я думаю, что это обман, потому что atan вычисляет 1/4 пи, но, тем не менее, это интересное решение.
Томас О
1
@ Томас О: если это обман, где предел?
JB
1

Python3 136

Использует формулу Мадхавы .

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.

isaacg
источник
Это не заслуживает отрицательного ответа ...
Beta Decay
Этот ответ неверен, он генерирует 34247779 ... который, насколько мне известно, не является пи.
orlp
@orlp rОперация была недавно изменена таким образом, что сломал этот ответ. Измените на 1a 0, и он будет работать в текущем Pyth.
Исаак
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
RosLuP
источник