原です。

In message "[ruby-math:00676] Re: power"
    on 02/04/08, 石塚圭樹 <keiju / rational.com> writes:

|>のような部分がありますが、while を 2重にする必要はなくて、
|>
|>    z = x = self
|>    n = other - 1
|>    while (n & 1 != 0 and z *= x; (n >>= 1) != 0)
|>      x = x * x
|>    end
|>    z
|>
|>の方がわかりやすいかも。速さはほとんどど変わりませんが。
|
|この後幾つかメイルのやり取りがあってみたいですが, 結論としてこれでよいと
|なったんですよね?

そうです。これはこれでいいと思います。


|>ところで、
|>
|>    n = other - 1
|>
|>という操作も other が2のベキのとき、無駄を作る気がしたんだけど、
|>一般にはそうでもないみたいですね。もっといいアルゴリズムってな
|>いかしら?
|
|これ私もちょっと悩みましたが, 2**n + 1 の時は無駄がないと言うことで,
|otherの分布にもよりますが, 一般的にはさほど効率は変らないんだということ
|で納得しました.

でも other - 1 しないで other のままの方でも、もともと 2**n + 1 の
時は軽いので、なかなか微妙なんですけど、複数の other の平均は多分
変わらないんでしょうね。