アップルでパイを作る
ちょっと息抜きにアップルでパイを作ってみた。
今回用意した材料はこれである。
アップル 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:導出は各自の宿題