検証

fibの速度比較の記事を見て、ふと気になりましたので、

お気に入りの処理系Chicken Schemeで下記のテストを行ってみました。

( declare ( unsafe ) ( fixnum-arithmetic )) ( define ( fib* n ) ( if ( < n 2 ) n ( + ( fib* ( - n 1 )) ( fib* ( - n 2 ))))) ( time ( begin ( display ( fib* 40 )) ( newline ))) ( define ( fib** n ) ( define ( fib** n ) ( if ( < n 2 ) n ( + ( fib** ( - n 1 )) ( fib** ( - n 2 ))))) ( fib** n )) ( time ( begin ( display ( fib** 40 )) ( newline )))

コンパイルオプション:

csc test.scm -O2

実行結果:

102334155 6.2s CPU time, 0.026s GC time (major), 61/40496 GCs (major/minor) 102334155 0.912s CPU time

ちなみに最適化オプションがなかった場合、

fib* と fib** は実行速度にほとんど差がありませんでした。