近岡です。 > >ということは code をできるだけ短くしたい時には > > def isqrt_ini > return 0 if self == 0 > return 1 if self < 4 > j = (bitlength + 1) >> 2 > x = (self >> (j << 1)).isqrt_ini > ((x<<j) + (self>>j).div(x)) >> 1 > end > >でも良いということですね。 >ただ速度的にはどうなんでしょうか? >> 原さん >私のところでは殆んど差がわかりません。 私だったら、 def isqrt_ini return <FIXNUM用ルーチン呼出し> if <FIXNUMの場合> j = bitlength >> 2 x = (self >> (j << 1)).isqrt_ini ((x<<j) + (self>>j).div(x)) >> 1 end とします。 こうすれば、C言語に書きなおした場合に、 短く判りやすくなるのではないかと思います。 ここまできたら、速度はほとんどかわりませんし。 FIXNUM でおさまる範囲では、 ビットずらししてまで値を小さくする必要がありません。 再帰呼び出ししない普通のやり方で十分。 0----+----1----+----2----+----3----+----4----+----5----+----6 近岡 宣吉 Chikaoka, Nobuyoshi 富山県立高岡西高等学校(数楽科) E-mail : chikaoka-nobuyoshi / tym.ed.jp