速度比較
C言語の実装と(fib-bench.c)、PHPの素朴な実装1の速度を比較すると図のようになります(Athlon 64 X2 4400+, 主記憶2GBのマシンで実行しました。グラフの横軸が対数になっていることに注意してください)。
nが小さいところだけ調べて、「Fibonacci数の計算時間は一定だ」というふうに誤解することがあるかもしれません。f(n)の計算時間は、(今日私たちが利用できる実装においては)nと共に増加します。
おわりに
本稿で解説したのは以下の3点です。
- PHPで多倍長整数を扱う方法(Fibonacci数の計算を例にして)
- プログラムの一部の実行時間を計測する方法
- 複数の数値データから統計量を求める方法
PEAR Math_Fibonacci
は特殊な実装をしているため、大きいnに対するf(n)の計算には使えないことが分かりました。
Fibonacci数や多倍長整数が必要になることはあまりないかもしれませんが、ちょっとしたベンチマークや統計処理が必要になることは多いと思います。そういう時に、本稿で紹介した方法がきっと役立つでしょう。
参考文献
- 『The Art of Computer Programming Volume 1 Fundamental Algorithms Third Edition 日本語版』 ドナルド・E・クヌース 著、有澤誠・和田英一 編、青木孝・筧一彦・鈴木健一・長尾高弘 訳、アスキー、2004年2月
- 『The Art of Computer Programming Volume 3 Sorting and Searching Second Edition 日本語版』 ドナルド・E. クヌース 著、有澤誠・和田英一 訳、アスキー、2006年4月