けいじゅ@日本ラショナルソフトウェアです.

In [ruby-math :00670 ] the message: "[ruby-math:00670] power ", on
Apr/06 20:03(JST) sinara / blade.nagaokaut.ac.jp writes:

>原です。

ども.

>matrix.rb で ** の定義の中で

(中略)

>のような部分がありますが、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の分布にもよりますが, 一般的にはさほど効率は変らないんだということ
で納得しました.


__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju / rational.com <<---