Обчисліть 500 цифр пі


25

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

  • Він повинен бути менше 500 символів.
  • Він не може включати "pi", "math.pi" або подібні константи pi, а також не може викликати функцію бібліотеки для обчислення pi.
  • Він не може використовувати цифри "3", "1" і "4" послідовно.
  • Він повинен виконуватись у розумний час (менше 1 хвилини) на сучасному комп’ютері.

Виграє найкоротша програма.


Щоб перевірити правильність ваших цифр: eveandersson.com/pi/digits
Nellius

Чи дозволяється нам надрукувати більше 500 цифр із втратою точності після перших 500?
Олександру

@ Александру, я думаю, що так, але я вважаю за краще, щоб це було усіченим.
Томас О

@Joey немає функцій бібліотеки для ПІДРАВЛЕННЯ PI - я припускаю, що ви можете використовувати будь-що з бібліотек, крім константи / функції PI.
Aurel Bílý

1
Чи можемо ми використовувати бібліотеку HTTP для завантаження веб-сайту "цифр пі"? ;-)
dan04

Відповіді:


11

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

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

Я опублікую аналіз пізніше


5
Чи можете ви пояснити, як це працює?
Томас О

65
"Я опублікую аналіз пізніше". (чекає 3 роки) ....
Джастін

14
"Я опублікую аналіз пізніше" * чекає більше 6 років *
Erik the Outgolfer

1
@EriktheOutgolfer Я збирався це опублікувати. : P
Крістофер

1
"Я опублікую аналіз пізніше" (чекає 8 років)
Jono 2906

8

Математика (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

Можливо, ви могли б її скоротити: змінити sqrt[1-x^2]на(1-x^2)^.5)
Джастін

і я можу видалити * після 2. Математика чудова.
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
У правилах сказано: "а також не можна називати функцію бібліотеки для обчислення pi".
Пітер Тейлор

@Peter Проблема, яку я думаю, полягає в тому, що "функція бібліотеки" не завжди є чітко визначеним терміном, і вона стає гіршою лише тоді, коли ви скажете "обчислити Pi", оскільки ви можете використовувати її для обчислення проміжних результатів, наприклад Sqrt () у відповідь Олександру.
Доктор Белісарій

Я думаю, що це обман, тому що Атан обчислює 1/4 пі, але все-таки це цікаве рішення.
Томас О

1
@Thomas O: якщо це обман, де межа?
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

Математика - 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 + ...))))знайдений у коментарях до відповіді Гольфскрипту.


Цього не заслуговує жодних змагань ...
Бета-розпад

Ця відповідь невірна, вона породжує 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, і воно використовувало б розширення serie для 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.