From: matz@... (Yukihiro Matsumoto) Date: 2000-11-07T02:51:26+09:00 Subject: [ruby-dev:11388] Re: [PATCH] an analogue of `long long' まつもと ゆきひろです In message "[ruby-dev:11381] Re: [PATCH] an analogue of `long long'" on 00/11/06, Masahiro Tanaka writes: |http://www.nara-edu.ac.jp/~asait/visual_c/sample/mersenne.htm#section216 | |によると、割算の場合、a/b を計算する前に、 |b の 最上位 digit の 最上位 bit が 1 となるように、 |a,b ともに同じだけ shift up してやるのが良いようです。 |そうすれば bigdivrem() の中の "add back" が最大2回で済みます。 |計算後、商はそのまま、余りは up した分 shift down すれば |答となります。 おお、そうかっ、と思ってソースを見てたらどうやらすでにそうい うことをしているようです。bignum.cのbigdivremでは if ((dd = BIGRAD/(BDIGIT_DBL_SIGNED)(yds[ny-1]+1)) != 1) { のからの部分です。知らなかった(苦笑)。 まつもと ゆきひろ /:|)