近岡です。
>
>ということは 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