原です。

>近岡です。

>>    len = RBIGNUM(x)->len;
>>    u = BDIGITS(x)[len - 1];
>>    if (u == 0) return INT2FIX(1);
>>    for (i = BITSPERDIG - 1; (((BDIGIT)1 << i) & u) == 0; i--) ;
>>    return LONG2FIX((len - 1) * BITSPERDIG + i + 1);
>>}
>の最後の数行を
>
>    len = RBIGNUM(x)->len;
>    u = BDIGITS(x)[len - 1];
>    i = (len - 1) * BITSPERDIG;
>    while (u > 0) { 
>        u >>= 1; i += 1;
>    }
>    return LONG2FIX(i);
>
>とすることもできますね。

ええ、普通そうしますね。私はただ、

  (BDIGIT)1 << i <-> u >>= 1
  x & u == 0     <-> u > 0

と比べて左辺が速いかなって思ったんですけど、そんなに変わるはず
ないんで、分かりやすい方がいいですね。

そろそろまとめないとな。

#私がやるのかなあ。(^^;