新しく発言する  EXIT  インデックスへ

円周率の計算


  円周率の計算 KK62526 2008/07/22 23:42:21 
  !C言語版の移植PiSpigot.BAS 山中和義 2008/07/30 16:41:28  (修正1回)
   └C言語版への移植どうもありがとうございまし... KK62526 2008/07/31 08:32:40 

  円周率の計算 KK62526 2008/07/22 23:42:21   ツリーへ
円周率の計算  返事を書く  ノートメニュー
KK62526 <vrgekmpzvy> 2008/07/22 23:42:21
初めて投稿いたします。KK62526と申します。
このたび、十進BASICに関するサイトを立ち上げましたので、
報告申し上げます。

特に、円周率に関するプログラムを記載しております。
なるべく、他のサイトでは見受けられない公式等について
書いたつもりです。URLアドレスを次に示します。

http://www14.ocn.ne.jp/~kk62526/pi/index.html
メインページです。
PiEuler.BAS......オイラーの無限級数に基づく漸化式
PiGosper.BAS.....ゴスパーの無限級数に基づく漸化式

http://www14.ocn.ne.jp/~kk62526/pi/Spigot.html
こつこつアルゴリズムのページです。
PiSpigot.BAS.....オリジナルのこつこつアルゴリズム
PiSpigotGibbons.BAS......Gibbonsのアルゴリズム

http://www14.ocn.ne.jp/~kk62526/pi/Iterate.html
繰り返し計算に基づくアルゴリズムのページです。
PiArchimedes.BAS...アルキメデスの方法
PiGaussSalaminBrent.BAS...Salamin,Brentの方法
PiBorwein.BAS...Borwein兄弟の方法

http://www14.ocn.ne.jp/~kk62526/pi/Divergent.html
円周率を与える発散級数のページです。
PiDivergent3.BAS....エイトケン加速で収束させる方法

http://www14.ocn.ne.jp/~kk62526/pi/Acceleration.html
グレゴリー級数の収束の加速に関するページです。
PiSugimoto.BAS....Sugimotoの補正項による加速
PiEulerKnoppWynn.BAS...EulerKnopp変換による加速
PiAitken.BAS....エイトケン加速
PiSumalt1o.BAS...コーエンのSumalt1アルゴリズムによる加速
PiSumalt1a.BAS...コーエンのSumalt1アルゴリズムによる加速

http://www14.ocn.ne.jp/~kk62526/pi/MonteCarlo.html
モンテカルロ法に関するページです。
PiDartBoard.BAS...当たり外れのモンテカルロ法
PiSampleMean.BAS...標本平均モンテカルロ法
PiSampleMean2.BAS...主部の分離による高精度化
PiSampleMean3.BAS...加重サンプリングによる高精度化

====

過去の掲示板を拝見いたしますと、円周率の2000桁の計算の
話題を見つけました。
手元の、Pentium Mプロセッサ740(1.73GHz)、メモリ2Gの
マシンで、PiSpigot.BASを実行しましたところ、およそ10秒で
2000桁計算しました。

当方、十進BASICについては初心者です。プログラムも、
効率的でない部分が多々あるかと存じます。いろいろ
ご教示願えれば、ありがたく存じます。

P.S.
円周率のほかに、L-systemについても書きました。
十進BASICのリンク集にも、L-systemのプログラムが
ありましたので、いろいろな図を描かせてみてください。
  !C言語版の移植PiSpigot.BAS 山中和義 2008/07/30 16:41:28  (修正1回)  ツリーへ
Re: 円周率の計算  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/07/30 16:41:28 ** この記事は1回修正されてます
!C言語版の移植 PiSpigot.BAS

REM---> long a[52514],b,c=52514,d,e,f=1e4,g,h;
DIM a(0 TO 52514-1)
MAT a=ZER !※C言語は初期化しないため値は不定
LET b=0 !※
LET c=52514
LET d=0 !※
LET e=0 !※
LET f=1E4
LET g=0 !※
LET h=0 !※

REM---> main(){
!nop

REM---> for(;b=c-=14;h=printf("%04d",e+d/f))
!nop !for( ;〜;〜)部分

DO !for(〜;b=c-=14;〜)部分
LET c=c-14
LET b=c
IF b=0 THEN EXIT DO

REM---> for(e=d%=f;g=--b*2;d/=g)
LET d=MOD(d,f) !for(e=d%=f;〜;〜)部分
LET e=d

DO !for(〜;g=--b*2;〜)部分
LET b=b-1
LET g=b*2
IF g=0 THEN EXIT DO

REM---> d=d*b+f*(h?a[b]:f/5),
IF h<>0 THEN LET d=d*b+f*a(b) ELSE LET d=d*b+f*INT(f/5)

REM---> a[b]=d%--g;
LET g=g-1
LET a(b)=MOD(d,g)


LET d=INT(d/g) !for(〜;〜;d/=g)部分

LOOP


LET h=e+INT(d/f) !for(〜;〜;h=printf("%04d",e+d/f))
PRINT USING "%%%%": h;

LOOP

REM---> }
END
   └C言語版への移植どうもありがとうございまし... KK62526 2008/07/31 08:32:40   ツリーへ
Re: !C言語版の移植PiSpigot.BAS  返事を書く  ノートメニュー
KK62526 <vrgekmpzvy> 2008/07/31 08:32:40
C言語版への移植どうもありがとうございました。

HPのこつこつアルゴリズム(Spigot Algorithm)は、
参考文献[25] Jorg Arndt, Christoph Haenel著,
π Unleashed, Springer, 2001, ISBN 3-540-66572-2
を参考にしました。

今回移植いただいたのは、p37 に掲載のCソースです。
一方、HPに書かせていただいたのは、p82 に掲載の
「高速版」を十進BASICに移植したプログラムです。
短いプログラムでも15000桁計算できることを示したくて
短い方のCソースを掲載いたしました。本来ならば、HPには
山中さんに移植いただいたほうのプログラムを載せる
べきだったかもしれません。


ちなみに、こつこつアルゴリズムの詳細は、参考文献[5]
J.-P. ドゥラエ著、畑正義訳、π-魅惑の数、朝倉書店、
2001、ISBN 978-4-254-11086-9
に書かれています。

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。