|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Nick Gorinov 2:5038/8.24 02 Jun 2002 11:29:18 To : Stas Rasovsky Subject : Число Pi -------------------------------------------------------------------------------- 28 May 02 12:14, Stas Rasovsky wrote to All: SR> Вопpос конечно ламмеpский, но все же. SR> Подскажите оптимальный алгоpитм нахождения числа pi. как-то в ru.math накопал и объединил в некое подобие faq === Cut === Д новая конфа (2:5038/14.101) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД RU.MATH Д Msg : 124 of 2037 -120 *147 From : ega@fian.smr.ru 2:5020/400 25 Sep 01 20:23:20## To : Lisetsky Mykola 26 Sep 01 03:11:05 Subj : Re: Calculation Pi ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД From: ega@fian.smr.ru Reply-To: ega@fian.smr.ru From: Eugeny Abramochkin <ega@fian.smr.ru> Посмотри http://www.cecm.sfu.ca/organics/papers/borwein/index.html -- Regards. Отправлено через сервер Talk.Ru - http://www.talk.ru -+- ifmail v.2.15dev5 + Origin: Talk.ru (2:5020/400) Д новая конфа (2:5038/14.101) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД RU.MATH Д Msg : 193 of 2037 -161 +207 From : Pavel Vasilyev 2:5020/3003.19 03 Oct 01 10:15:39## To : Ilya Chernyh 04 Oct 01 05:23:07 Subj : Calculation Pi ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Привет Ilya! 30 Сентябрь 2001 года (а было тогда 00:52) Ilya Chernyh в своем письме к Lisetsky Mykola писал: LM>> Подскажите алгоритм вычисления числа ПИ с большой точностью LM>> (например, 100 или больше десятичных разрядов). Или дайте наводки. JS>> Писал я как-то программку она вычисляет e до 20000 знаков. Подсчет JS>> с помощью ряда. Правда когда пыталься ее переделывать по число пи JS>> не фига не получилось. Там правда ряд посложнее. Hаписано на С++. JS>> Могу поделиться. Может глюк мой отловишь/ IC> Если получится, пришли мне. Pi = 24*arctg(1/8)+8*arctg(1/57)+4*arctg(1/239) и соответствено значения аpктангенсов вычесляют с помощью pяда Маклоpена: arctg(x)=x-(x^3/3)+(x^5/5)-(x^7/7)+ . . . P.S. Говоpят что точность составляет 100000 знаков С уважением, Pavel 03 Октябрь 2001 года -+- ........... + Origin: --------------------------------------------------- (2:5020/3003.19) Д новая конфа (2:5038/14.101) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД RU.MATH Д Msg : 230 of 2037 -219 *239 From : Max Alekseyev 2:5015/60 06 Oct 01 16:28:20## To : Egorov Pavel 07 Oct 01 23:37:44 Subj : Calculation Pi ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЫЫЫЫ OS/2 Hi, Egorov ! Replying to a message of Egorov Pavel to Lisetsky Mykola: EP> Взято из FAQ по Demo&Design. Как работает - Черт его разберет, но EP> работает! EP> =================== EP> long d; EP> int b=0,a=10000,c=2800,g,e,f[2801]; EP> main() EP> { EP> for(;b-c;) f[b++]=a/5; EP> for(; d=0,g=c*2; c-=14,printf("%.4d",e+d/a),e=d%a) { EP> for(b=c; d+=f[b]*(long)a, f[b]=d%--g,d/=g--,--b; d*=b); EP> } EP> } EP> =================== Замечу, что автором приведенной программы на C является Dik T. Winter из CWI. Кстати, в оригинале ее текст состоит ровно из 160 символов. Вот эквивалентная (более прозрачная) программа на паскале: ===cut=== var b,g:integer; f:array[1..2800] of integer; const e:integer=0; d:longint=0; a=10000; c:integer=2800; procedure print4(x:integer); var s:string; begin Str(x:4,s); while pos(' ',s)>0 do s[pos(' ',s)]:='0'; write(s); end; begin for b:=1 to c do f[b]:=a div 5; while c>=0 do begin d:=0; for b:=c downto 2 do begin inc(d,f[b]*a); g:=2*b-1; f[b]:=d mod g; d:=d div g; d:=d*b; end; dec(c,14); print4(e+d div a); e:=d mod a; end; end. ===cut=== Из нее следует, что Pi здесь считается по формуле oo i! Pi = 2 * Sum -------- i=2 (2i-1)!! Сходимость у нее - геометрическая, что довольно неплохо. Regards, ш.ш Max ~ -+- FleetStreet 1.27.3.6 + Origin: (2:5015/60) Д новая конфа (2:5038/14.101) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД RU.MATH Д Msg : 243 of 2037 -239 From : Egorov Pavel 2:5080/169.35 07 Oct 01 23:22:42## To : Lisetsky Mykola 08 Oct 01 03:12:56 Subj : Calculation Pi ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Приветик, Lisetsky! On Sunday October 07 2001 you wrote to Egorov Pavel: LM> From: "Lisetsky Mykola" <lis@mksat.net> >> Взято из FAQ по Demo&Design. Как работает - Черт его разберет, но LM> работает! LM> Подскажите, где найти этот FAQ по Demo&Design? www.enlight.ru это огромная свалка всего всего всего.... Только тот, кто это там запостил сам признался, что не знает как это работает. >> long d; >> int b=0,a=10000,c=2800,g,e,f[2801]; >> main() >> { >> for(;b-c;) f[b++]=a/5; >> for(; d=0,g=c*2; c-=14,printf("%.4d",e+d/a),e=d%a) { >> for(b=c; d+=f[b]*(long)a, f[b]=d%--g,d/=g--,--b; d*=b); >> } >> } LM> Видимо, в этой программе есть какая-то неточность, т.к. LM> переменная е LM> не инициализирована. Поэтому первые цифры результата - неправильные. LM> Hо начиная со второй итерации программа работает нормально (вроде). BC++ работает правильно. Видимо использует свойство компилятора инициализировать переменные нулем. Hу, Все! Пока Lisetsky. -+- GoldED/386 3.00.Alpha3+ + Origin: 2+2=4 это не тождество, а выражение равное TRUE (2:5080/169.35) Д новая конфа (2:5038/14.101) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД RU.MATH Д Msg : 264 of 2037 -120 From : gold@ems.ru 2:5020/400 09 Oct 01 12:17:14## To : Lisetsky Mykola 10 Oct 01 00:54:52 Subj : Re: Calculation Pi ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД From: gold@ems.ru Reply-To: gold@ems.ru From: "Dmitriy Goldobin" <gold@ems.ru> Hi! Еще до кучи: 1. AGM Если верить ссылкам это сейчас самый быстрый, но и самый сложный в программировании (корень от произведения длинных чисел) способ. Удваивает (!) число правильных бит на каждой итерации: c = sqrt(0.125); a = 1 + 3 * c; b = sqrt(a); e = b - 0.625; b = 2 * b; c = e - c; a = a + e; npow = 4; do { npow = 2 * npow; e = (a + b) / 2; b = sqrt(a * b); e = e - b; b = 2 * b; c = c - e; a = e + b; } while (e > SQRT_SQRT_EPSILON); e = e * e / 4; a = a + b; pi = (a * a - e - e / 2) / (a * c - e) / npow; 2. Приемлемый по скорости (14 десятичных знаков за итерацию) - на итерациях операции деления и умножения только между большим и 32-битным числами, а не между двумя большими. k_1 = 545140134; k_2 = 13591409; k_3 = 640320; k_4 = 100100025; k_5 = 327843840; k_6 = 53360; S = sum(n = 0..oo) (-1)^n * ((6n)!(k_2 + nk_1))/(n!^3(3n)!(8k_4k_5)^n) pi = (k_6 sqrt(k_3))/(S) 3. Способ сравнимый по скорости с 16*atn(1/5)-4*atn(1/239), но сходится _ровно_ на 4 бита за итерацию, что позволят без больших затрат памяти посчитать конкретный бит (4 бита) числа пи. pi = sum(n=0..oo) (1/16^n)*((4/(8n+1) - 2/(8n+4) - 1/(8n+5) - 1/(8n+6)) Bye. -+- ifmail v.2.15dev5 + Origin: Demos online service (2:5020/400) === Cut === С уважением, Nick! np: кулеры, винты, уличный шум, etc. --- GoldED/386 3.00.Beta5+ * Origin: ловись коннект большой и маленький! (2:5038/8.24) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/28043cfa0191.html, оценка из 5, голосов 10
|