Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [php] Алгоритм получения числа Пи (https://forum.antichat.xyz/showthread.php?t=159605)

acdel 27.11.2009 23:27

[php] Алгоритм получения числа Пи
 
Собственно заинтересовала тема связанная с числом Пи.
Возможно выбрал не самый подходящий язык, а именно php. Собственно возникла проблема с выбором оптимального алгоритма для получения числа Пи, скажем с точночтью до 10^100 знаков после запятой. Может кто сталкивался с такими вычеслениями, буду признателен за любую инфу в этом направлении.

astrologer 27.11.2009 23:43

Цитата:

Сообщение от acdel
Собственно возникла проблема с выбором оптимального алгоритма для получения числа Пи, скажем с точночтью до 10^100 знаков после запятой.

Для начала тебе понадобится вселенная побольше. В этой не хватит места, чтобы их записать.

Adekvatnyj 27.11.2009 23:53

Число пи?) А что это ?)))
А если серьезно 2(Pi)r квадрат

wildshaman 27.11.2009 23:56

Цитата:

Сообщение от Adekvatnyj
Число пи?) А что это ?)))
А если серьезно 2(Pi)r квадрат

В школе новую формулу выучили? Поздравляю.

Тс, дели 22 на 7

Adekvatnyj 28.11.2009 00:04

Цитата:

В школе новую формулу выучили? Поздравляю.

Тс, дели 22 на 7
нет вроде в школе уже давно ничему не учили.
А ты вижу гуглишь норм.

acdel 28.11.2009 00:11

Цитата:

Сообщение от wildshaman
Тс, дели 22 на 7

22/7=3,142857

Увы. но это не подходит ибо не соответствие уже в 3 знаке, а речь идет о точности 10^100 знаков. Интересует реализация в коде, пусть в общем виде, главное получить результат в виде массива n*m.

wildshaman 28.11.2009 00:18

Да, 22\7 -не самая точная рациональная дрбь.
На вики рапсисано много алогритмов получения - http://ru.wikipedia.org/wiki/Pi

Kusto 28.11.2009 00:34

Цитата:

Сообщение от acdel
с точночтью до 10^100 знаков после запятой.

а ничего что (выдержка из мануала по php)размер целого зависит от платформы, хотя максимум, как правило, ~1.8e308 с точностью около 14 десятичных цифр (это 64-битный IEEE-формат).

[QwyZ] 28.11.2009 02:20

<?php
$numb=22/7;
sprintf("%.1000000000000f",$numb);
?>

LStr1ke 28.11.2009 02:46

Парси это =)
http://pi314.narod.ru/pi314.htm
-
А вообще почитай может интересно будет
http://algolist.manual.ru/maths/count_fast/pi.php

GenTao 28.11.2009 05:41

precision в php.ini не забудьте поменять )).

krypt3r 28.11.2009 16:55

Цитата:

Собственно возникла проблема с выбором оптимального алгоритма для получения числа Пи, скажем с точночтью до 10^100 знаков после запятой.
Цитаты с вики
Цитата:

Текущий рекорд — 1 241 100 000 000 десятичных знаков, установлен Канадой и его группой в 2002 году...
Вычисление было выполнено на суперкомпьютере Хитачи из 64 узлов с 1 терабайтом оперативной памяти, способном выполнять 2 триллиона операций в секунду.
ТС, а сколько, простите, у вас суперкомпьютеров в наличие, если вы замахиваетесь на такую точность?

vp$ 28.11.2009 18:24

на пэхе врядли точнее 7-8 символов получится

http://ipicture.ru/uploads/091128/13581/NpeTF2yA0j.png

алгоритм взят из вики

PHP код:

<?php

$pi 
0;
for(
$i=0;$i<99999999999999999;$i=$i+4)
{

$pi $pi 1/($i+1)-1/($i+3);
echo 
$pi*;
echo 
"\n" ;

}

?>


Forcer 28.11.2009 18:35

Что, классов для работы с большими числами не существует?

nerezus 29.11.2009 00:48

bcmath

acdel 29.11.2009 20:59

Цитата:

Сообщение от krypt3r
Цитаты с вики

ТС, а сколько, простите, у вас суперкомпьютеров в наличие, если вы замахиваетесь на такую точность?

Один. Но изначально я ошибся в плане php, залез в этот раздел потому как он более живой, а в алгоритме поправтье если это не так, главное не язык на котором кодить, а сам алгоритм . Цель не брать "железом", а совершенствовать, (оптимизировать) сам алгоритм вычислений числа Pi. Зачем супержелезо если например взять нейронные сети или как вариант ботнет для распределенных вычислений, ну или ..... Вот собственно поэтому и создал тему так как надеюсь услышать советы в данном направлении с компетентных уст.

krypt3r 29.11.2009 21:11

кмк, лучше комбинации C + Asm вы вряд ли найдете по скорости работы. PHP для таких расчетов не годится, имхо. Он не для этого создавался.
ЗЫ. Никто не мешает реализовать один и тот же алгоритм с фиксированным числом итераций на разных ЯП и сравнить

Root-access 29.11.2009 23:03

Цитата:

Сообщение от krypt3r
кмк, лучше комбинации C + Asm вы вряд ли найдете по скорости работы. PHP для таких расчетов не годится, имхо. Он не для этого создавался.
ЗЫ. Никто не мешает реализовать один и тот же алгоритм с фиксированным числом итераций на разных ЯП и сравнить



Думаю, что для высоконагруженных математических расчётов больше подходит функциональное программирование.
Рекомендую Erlang - он очень хорош для распределённого программирования, и в нём нет ограничений на величину чисел.

NOmeR1 01.12.2009 01:06

Код:

<?php
        $r = 4;
        $tochnost = 1000000;
        function y($x) {
                global $r;
                return sqrt($r*$r-$x*$x);
        }
        for($i=-$r*$tochnost;$i<$r*$tochnost;$i++) {
                $x1 = $i/$tochnost;
                $y1 = y($x1);
                $x2 = ($i+1)/$tochnost;
                $y2 = y($x2);
                $d += sqrt(pow(($x2-$x1),2)+pow(($y2-$y1),2));
        }
        echo 'pi = '.$d/$r;
?>


m0Hze 01.12.2009 01:07

Еще как вариант,длинные числа можно выводить постепенно.Тоесть - считать постепенно.Сначала считаем сотые,затем тысячные,и так до скольки хотите.Я бы делал наверное так,с глубиной вложения гдето на 15-20 знаковых отличий.

LStr1ke 01.12.2009 10:06

<?php
echo pi();
?>
result: 3.1415926535898
Пи - константа, и какой смысл изобретать алгоритм для ее обноружения?

blaga 01.12.2009 10:12

LStr1ke, пи не может быть константой т.к. число вроде как бесконечное.

LStr1ke 01.12.2009 10:18

Число "пи" () выражает отношение длины окружности к своему диаметру. (с)
а согласно постулату Архимеда "Отношение любой окружности к ее диаметру меньше чем 3 1/7 и больше 3 10/71". Значит число ограничено. Вопрос лишь в каличестве знаков.

krypt3r 01.12.2009 10:42

Как раз этим ТС и собирается заняться - количеством знаков после запятой

LStr1ke 02.12.2009 10:10

=\
http://en.wikipedia.org/wiki/Gauss-Legendre_algorithm
ТСу в помощь

m0Hze 02.12.2009 15:57

И все же,можно сделать так.Теория:
PHP код:

$eas 10;
$gau 3

Далее,делаем цикл глудиной $eas. В нем считаем число пи,и округляем до $gau знаков после запятой.Все остальное засчитываем в переменную.В следующем витке цикла,считаем число пи опять,но считаем только ту часть,которая идет после пред-идущего ответа,и сравниваем с предидущим ответом и округляем в меьшую сторону.Полученый ответ заносим в переменную пи,точнее добавлям..И так,до конца $eas. В конце мы получаем почти точное число,с точностью до $eas*$gau знаков. Ну как то так.Это прсото теория, если немножно изменить,то можно юзать.

NigHT_0WL 02.12.2009 18:30

Цитата:

Сообщение от m0Hze
И все же,можно сделать так.Теория:
PHP код:

$eas 10;
$gau 3

Далее,делаем цикл глудиной $eas. В нем считаем число пи,и округляем до $gau знаков после запятой.Все остальное засчитываем в переменную.В следующем витке цикла,считаем число пи опять,но считаем только ту часть,которая идет после пред-идущего ответа,и сравниваем с предидущим ответом и округляем в меьшую сторону.Полученый ответ заносим в переменную пи,точнее добавлям..И так,до конца $eas. В конце мы получаем почти точное число,с точностью до $eas*$gau знаков. Ну как то так.Это прсото теория, если немножно изменить,то можно юзать.

это все хорошо, но современные методы и среды программирования допускают погрешности. "Переменные, представляющие число с плавающей точкой, то есть, представляющие собой десятичную дробь. Величина со спецификатором типа float занимает 4 байта. Величина типа double занимает 8 байт в памяти. Есть еще тип long double. Беда, правда, в том, что у него разные размеры на разных компиляторах, а в некоторых он вообще отсутствует."
это развитие нейросетей, не для того, чтобы высчитать число ПИ, а для того, чтобы найти подходящий алгоритм его вычисления. Кстати спасибо за топик, много интересной информации подчерпнул по ходу исследования вопроса))

nerezus 03.12.2009 04:49

Цитата:

Значит число ограничено.
Потому что тебе так сосед сказал?))


Время: 12:22