なんだこれは

はてなダイアリーから移転しました。

アップルでパイを作る

ちょっと息抜きにアップルでパイを作ってみた。

今回用意した材料はこれである。

アップル 1個 OS(Tiger10.4.11/ibook G4 1.2GHz PowerPC)
トッピング 公式1個 好みの物

そう、無限級数の計算である。

\frac{\pi}{4}=\sum_{i=1}-(-1)^i\frac{1}{2i-1}

という計算式がある。*1

それで、これを計算してみる。言っておくがこの計算は収束が非常に遅いので、実用的ではない。さーてどれだけ収束が遅いかなー。

Calc on OpenOffice.org (3.0 beta)で2000桁まで計算してみた。

一応表示桁を増やしておく。絶望的な進み方をする。どうしよう?しかも、これだと数が小さくなったときに計算してくれないかも?かも?

BC! BC! BC!

こういうときは任意精度で計算できるbc:the basic calculaterである。UNIX由来なのでTerminalから利用可能だ。

数式ライブラリはいつも利用するから-lをほぼ毎回つけている。Terminal.appで

bc -l

で起動。とりあえずscale=100にする。
さて、

n=1;p=1;while(n<100000){n=n+1;p=p+(-1)^(n-1)/(2*n-1);};p*4

で、どうだ!

3.141582653589793488462643352029502893728419393964949575908635991959\
2690551729875945272168247348044672

おお、小数点以下4桁目まで出せた。うん、ではshellから時間を計ってやってみる。

こういうファイルhogeを用意する。

scale=100;m=100000;n=1;p=1;while(n<m){n=n+1;p=p+(-1)^(n-1)/(2*n-1);};p*4

それでこうだ!

time cat hoge | bc -l
3.141582653589793488462643352029502893728419393964949575908635991959\
2690551729875945272168247348044672

real    0m5.419s
user    0m4.936s
sys     0m0.033s

おおし、では項数を1000000にしてみた。

3.141591653589793238712643383279190384197170352500105815564788342357\
1533203480491438917188683707420232

real    0m59.192s
user    0m53.710s
sys     0m0.149s

やっぱり1桁増えた。時間もほぼ10倍。iBookG4 PowerPC 1.2GHzではこの辺が限界か、うはー。ってことは100桁求めるには....やめた。

ちなみにscale=20くらいにすると時間が3/4くらいになるよ!

*1:導出は各自の宿題