Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Пи


Автор: __vi 23.1.2004, 11:28
Извините может быть за глупый вопрос, но мне интересны алгоритмы вычесления пи.
Вот есть такой который позволяет вычислять пи с любой точностью?

Автор: MuToGeN 23.1.2004, 11:38
Хм... Да, тоже интересно

Автор: shedon 23.1.2004, 12:11
http://mathc.chat.ru/hist/pihist.htm

Автор: __vi 23.1.2004, 13:27
Спасибо!

Автор: PROme 23.1.2004, 14:11
Очень-очень-очень советую разыскать №3 за Март 2002 журнал Hard'n'Soft (UA)

Там на 88-й странице начинается отличная статья "Пиратская тропинка к Пи"... в ней описыватся не только алгоритм поиска, но и возможности (что с помощью данного эдиного числа при достаточных вычислительных можностях можно закодировать (заархивировать) любую информацию любого размера)... вобще советую всем кто интересуются всяким таким программно-математическим почитать выпуски тех времен - было очень много отличнейших статей...

А вобще, в двух словах, насколько помню, ищется вписыванием многоугольника в круг - чем больше сторон у многоугольника - тем точнее получим значение Пи

Автор: MuToGeN 23.1.2004, 14:14
PROme
Это дело через пределы прогнать случайно нельзя? Изи я чего-то непонимаю...

Автор: shedon 23.1.2004, 14:16
Цитата
Очень-очень-очень советую разыскать №3 за Март 2002 журнал Hard'n'Soft (UA)

http://arbuz.ferghana.ru/z_pi.html

Автор: Chingachguk 23.1.2004, 15:04
Цитата

Это дело через пределы прогнать случайно нельзя? Изи я чего-то непонимаю...


Ну вот число e можно записать: limit (N->беск) (1+(1/N))^N.

А теперь запиши через предел отношение длины окружности (сумму сторон вписанного или описанного N-угольника) к радиусу.

Автор: asmworm 24.1.2004, 14:29
Вот что-то откопал:

=====================================
THE TEN BILLIONTH HEXADECIMAL DIGIT of Pi is 9

By: Simon Plouffe, Peter Borwein and David Bailey.

The following is part of a paper titled "On The Rapid Computation of
Various Polylogarithmic Constants". The full text, as well as
Fortran code, is available in

http://www.cecm.sfu.ca/~pborwein/

as P123 under the link "Computing Pi and Related Matters".

ABSTRACT:

We give algorithms for the computation of the d-th digit of certain
transcendental numbers in various bases. These algorithms can be
easily implemented (multiple precision arithmetic is not needed),
require virtually no memory, and feature run times that scale nearly
linearly with the order of the digit desired. They make it feasible to
compute, for example, the billionth binary digit of log(2) or pi on a
modest work station in a few days run time.

Indeed we computed the 10 billionth hexadeximal digit of pi as well as
the billionth hexadecimal digits of pi^2, log(2) and log^2(2), the
billionth decimal digit of log (9/10) and the five billionth decimal
digit of log(1 - 10^{-96}).


These calculations rest on three observations. First, the d-th digit
of 1/n is "easy" to compute. Secondly, this scheme extends to
certain polylogarithm and arctangent series. Thirdly, very special
types of identities exist for certain numbers like pi, pi^2, log(2) and
log^2(2). These are essentially polylogarithmic ladders in an integer
base. A number of these identities that we derive in this work appear
to be new, for example the critical identity for the binary digits of
pi is:

Код

       infinity
        -----
        \         -n    /     4          2          1          1     \
pi =    )      16      |  ------- - -------  - ------- - -------   |
        /               \  8 n + 1   8  n + 4   8 n  + 5   8 n +  6 /
        -----
        n = 0

===cut===

Теперь может кто-то кинет реализацию вышесказанного? Я что-то в матеиатике не очень.

Автор: acp 24.1.2004, 19:03
А что тут сложного в реализации?
Обычный ряд. Вычисляется в цикле.

Автор: asmworm 24.1.2004, 21:33
Цитата(acp @ 24.1.2004, 19:03)
А что тут сложного в реализации?
Обычный ряд. Вычисляется в цикле.

Хотел бы я узнать как ты вычислишь 10000000000000000000000000000000 знак confused.gif . Думаю тебе нужно что-то помощнее чем long double или extended biggrin.gif

Автор: shedon 24.1.2004, 21:48
Цитата
Хотел бы я узнать как ты вычислишь 10000000000000000000000000000000 знак  . Думаю тебе нужно что-то помощнее чем long double или extended 

Создай динамический массив и делай знак до каторого у тебя хватит памяти smile.gif

Автор: Chingachguk 24.1.2004, 22:35
По поводу приведеннной asmworm заметки. Я не очень хорошо знаю язык (позже со словарем посмотрю), но я не уверен, что эта формула описывает ПИ в смысле его "определения" или же результатом аналитических выкладок и скорее является чем-то вроде результата приближения ~"полиномами" вычисленных результатов или их части.

Автор: __vi 25.1.2004, 12:30
Я вот дома нашел сорс какой-то ужасно написанной проги (видно писал математик), но пи вычисляет, алгоритм понять не возможно, после некоторых модификаций смог заставить её вычеслять очень далеко (100 000 знаков после запятой за... 90 минут (у меня машина в 970bogomips)) очень медлено. Протестирую все вышепредложенные алгоритмы и скажу какой быстрее.

(Я так же хотел 10^6 после запятой но за 4 часа не было результата так я выключил)
Кстати если кто-нибудь может проверить достоверность вычисленний пишите мне личное сообщение, я пришлю.

Автор: asmworm 25.1.2004, 18:21
__vi
В принципе можно с помощью Mathematica 5 проверить, если у тебя её нет то пришли мне на мыло результат или лучше всего его CRC32(только скажи в какой системе счисления) или что-то в этом роде(чтоб не слать много кб)

Автор: maxim1000 25.1.2004, 22:54
Цитата
скорее является чем-то вроде результата приближения ~"полиномами" вычисленных результатов или их части.

если посчитать этот ряд аналитически, получится рациональная функция от sqrt(2), а так число ПИ точно выразить нельзя
возможно, этот ряд действительно приближает число ПИ (по крайней мере первое слагаемое дает 3.2711111111...)
но зато для вычисления любой цифры этого ряда описанным методом нужно количество операций порядка d*log(d)
и памяти почти не нужно
Цитата
Я вот дома нашел сорс какой-то ужасно написанной проги (видно писал математик), но пи вычисляет, алгоритм понять не возможно, после некоторых модификаций смог заставить её вычеслять очень далеко (100 000 знаков после запятой за... 90 минут (у меня машина в 970bogomips)) очень медлено. Протестирую все вышепредложенные алгоритмы и скажу какой быстрее.

а он большой? если не очень, может, его сюда выложишь?

Автор: maxim1000 25.1.2004, 23:18
Цитата
порядка d*log(d)

упс... ошибочка вышла...
алгоритм в таком виде, в котором я его понял требует d*d операций

Автор: __vi 26.1.2004, 11:16
Да я уже проверил... с какова-то знака идёт ошибка аж до конца.

Автор: __vi 27.1.2004, 11:14
Сорс я завтра вылажу а то он у меня дома, а в интерете я нашел ещё две программы, но они крупные. Поищи pi_c50.c и pi_c50f.c.
Дома попробовал разные подходы всё фигня по сравнению с формулой Chudnovskys. Как это на русский перевести?
Да ну и как формулу реализовать алгоритмически я пока не понял.
Как найду ссылку на формулу - поставлю.

Автор: MuToGeN 27.1.2004, 11:26
> аж до конца

какого конца?

Автор: __vi 27.1.2004, 11:26
Вот:
http://numbers.computation.free.fr/Constants/PiProgram/pifast.html
что-то такое и я хочу написать.

Автор: __vi 27.1.2004, 11:29
Цитата(MuToGeN @ 27.1.2004, 11:26)
> аж до конца

какого конца?

biggrin.gif Ну в контексте я сказал что считал до 100 000. Это и имел в виду под концом. biggrin.gif

Автор: __vi 27.1.2004, 15:05
И если кто будет заниматься этим делом то http://www.swox.com/gmp/

Автор: __vi 27.1.2004, 15:26
PiFast уже 4 часа не может 10^6 знаков вычислить. И это на 2GHz.

Автор: shedon 27.1.2004, 15:29
Этот пифаст сожрал у меня всю память, а за это Windows ему сказал, что память не может быть read и выкинул его нафиг.

Автор: __vi 27.1.2004, 18:35
А у меня не сожрал, потому что я запустил на компе девушки тут одной, она вроде работает smile.gif.

Автор: B0POH 6.4.2004, 22:56
Цитата(asmworm @ 24.1.2004, 21:33)
Хотел бы я узнать как ты вычислишь 10000000000000000000000000000000 знак ??? . Думаю тебе нужно что-то помощнее чем long double или extended biggrin.gif

А зачем тебе такой знак?
Во всех расчётах обычно оставляют первые 4 знака после запятой остальное ненадо.
Можно так сделать.
Берём любую тригонометрическую функцию например cos(х), sin(х), tg(х), и т.д.
Раскладываем её в ряд
Sin(x)=x-x³/3! +x³*x²/5!-x³*x²*x²/7!+…
или
Arctg(x)=x-x³/3+x³*x²/5-x³*x²*x²/7+…
Затем в случае арктангенса записываем x=tg(pi/4)=1
Получаем
Pi/4=1-1/3+1/5-1/7+…
Отсюда выражаем pi. notify.gif
Чем больше слагаемых сложим, тем точнее найдём pi.
А ещё можно через цепные дроби сделать тока это слишком хлопотно.

hehe.gif

Автор: Vit 6.4.2004, 23:18
Если кому-то надо, вот Pi до миллиона знаков и e до 5ти миллионов знаков


http://chicago.lastplanet.com/soft/Pi-1000000.zip
http://chicago.lastplanet.com/soft/e-5000000.zip

PS. может их в наш файловый архив поместить?

Автор: Elfet 29.12.2007, 15:16
Забавно: 392699/125000 = 3.14159  smile 

Автор: SoWa 29.12.2007, 17:47
Внизу странички тема "Вычисление числа Пи на калькуляторе"
Как его вычислить, мы вроде не нашли, но кучу интересного понаписали.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)