Previous: , Up: Division Algorithms   [Index]


15.2.7 小さい商になる時の除算

NxM除算において,商Q=N-Mのリムの数が小さい時には幾分最適化できます。

通常の筆算除法アルゴリズムは,割る数をシフトして正規化し,最大bitの値を1にして,更に割られる数も同様にシフトして,計算の最後には剰余もシフトします。 2,3リムしかない商の場合はこれは無駄なので,代わりに,割られる数の上の方の 2*Q リム分を,割る数の上から Qリム分で割るようにして,お試し商を求めます。 このためには最低でも割る数も割られる数も全てのリムを正規化する必要があります。

その後,乗算と減算をお試し商に適用し,割る数のM-Q個の未使用リムと,割られる数のN-Q の未使用リム(ここでお試し商を出す除算のQリム分を含む)を出します。 最初のお試し商は1,2だけ大きくなる可能性がありますが,その場合は最初に,減算した結果得られる最大有効リムを 比較することで大きくなっていることが分かります。加算して戻すのは商が1だけ大きくなった時です。

この計算全体は本質的にはQリムベースの筆算除法アルゴリズムの1ステップ分と同じですが,Qリム積の全体に行うのではなく,1リム分にのみお試し除算を行うところが異なっています。 この少し弱目のテストの正当性は,Knuth section 4.3.1 exercise 20で確立されていますが,v2*q>b*r+u2の条件については適度に緩められています。