豊福です。

[ruby-list:18638] 
もりきゅうさん
> fib2.rb より早いかと思いきやそんなことはなかった読みにくい版。

  実数 ** n が遅いんですかね。
組み込みで e ** (log(実数) * n) してるんでしたっけ。

> -- fib3.rb
> # Binet's formula
> def fib(n)
>   root_5 = Math::sqrt 5
>   golden_rate = (1+root_5)/2
>   golden_rate_anti = (1-root_5)/2
>   ((golden_rate ** n - golden_rate_anti ** n)/root_5).to_i
> end

  | golden_rate_anti | < 1.0 なので適当な n から先は

>   ((golden_rate ** n - golden_rate_anti ** n)/root_5).to_i
は
    ((golden_rate ** n)/root_5 + 0.5).to_i # 四捨五入

でよいというのを見たことがあるような気がします。
  これだともう少し速くなるかな。

  ついでに思ったんですが元の
>   ((golden_rate ** n - golden_rate_anti ** n)/root_5).to_i
だと丸め誤差の関係で .to_i したときに 1 小さくなる
可能性がありませんかね。
---
                        豊福
                        toyofuku / juice.or.jp