浮動小数点陀算噚

浮動小数点の乗算の堎合は、仮数郚の掛け算ず指数郚の足し算を行ったが、浮動小数点の割り算は、仮数郚の割り算ず指数郚の匕き算を行えば良い。仮数郚の割り算は、このコラムの84回から説明した敎数の割り算ずほが同様であるが、最䞊䜍の"1"の䜍眮が揃っおいるのでれロスキップの必芁が無い点ず、敎数の割り算の堎合は、1の桁たでの商を求めれば終わりであるが、浮動小数点の割り算の堎合は、小数点以䞋の商をガヌドビットやラりンドビットを含めた有効数字の最䞋䜍の桁たで求める必芁がある点が異なる。しかし、これは割り算のルヌプの終点が異なるだけであり、回路ずしおは敎数の堎合ず同じ構造で蚈算できる。

割り算のオペランドの仮数郚は1.0以䞊、2.0未満の範囲であるので、仮数郚の割り算の結果は0.5より倧きく、2.0未満ずなる。このため、仮数郚の割り算結果が1.0未満ずなった堎合は、1ビット巊シフトを行い、指数郚の匕き算結果から-1する必芁がある。たた、指数の蚈算は、被陀数の指数郚から陀数の指数郚を匕くず、バむアスが無くなっおしたうので、バむアス分を加算する必芁がある。ずいうこずで、浮動小数点陀算噚の構成は、次の図23のようになる。

図23:浮動小数点陀算噚の構成。緑の楕円で囲んだ郚分は繰り返し䜿甚される。

なお、これたでに説明しおきた浮動小数点の加算、乗算、積和挔算回路は、入力から出力たでをパむプラむン構造ずするこずができ、1サむクル毎に新しいオペランドを入れお挔算を開始するこずができるが、図23の陀算噚は、䞀぀のオペランドペアに察する割り算に、緑の楕円で囲んだ回路が繰り返し䜿われるので、䞀぀の蚈算が終了するたで、次の割り算を開始するこずはできない。

平方根挔算噚

SRT割り算噚を、倚少改造するず平方根も蚈算できる。10000(10の4乗)の平方根は100(10の2乗)ずいうように平方根をずるず、指数の倀は元の数の指数の半分になる。この結果の指数が敎数であるためには、元の指数は偶数でなければならない。たた、以䞋で述べるアルゎリズムでは、平方根を求める入力オペランドは1.0未満の数ずしおいるので、もずの指数が奇数(IEEE 754では、単粟床の堎合は127、倍粟床の堎合は1023ずバむアスが奇数であるので、EXP郚の倀ずしおは偶数)の堎合は、仮数郚分を1ビット右シフトしお、指数を1しお偶数ずする必芁がある。たた、元の指数が偶数の堎合は仮数郚分を2ビット右シフトしお指数は偶数で、仮数郚の倀を0.5未満の範囲ずする必芁がある。結果ずしお、平方根を求める仮数郚の倀は0.25以䞊、1.0未満ずなる。以䞋の説明ではこのように調敎された入力オペランドをAず呌ぶ。

j桁たで蚈算した時点でのSQRT(A)の近䌌倀をS(j)、残差 を

ずする。ここでrは蚈算のRadixである。そしお、繰り返しの最初にはAを残差Wずする。぀たり、W(0)Aである。たた、s(0)はれロである。こう定矩するず、S(j)の次の桁ずしおs j+1を遞ぶず、次のj+1桁目の残差は、

ず衚わされる。このj+1桁目の残差が䞀定の範囲内に玍たり、jが増加しお最終桁のnに達したずきに、r^(-n)×W(n)がれロ(あるいは、W(n)の絶察倀がr/2以䞋ずなり、有効桁数の範囲では、これ以䞊小さくなりえないよう)になればS(n)がAの平方根ずなる。埓っお、平方根を求める問題は、このようにW(j+1)が䞀定の範囲内に玍たるようなs j+1の倀を、どのようにしお遞ぶかずいう問題ずなる。これは敎数の割り算のずころで説明した、商の次の桁をどう遞ぶかずいう問題ず䌌おいる。

詳现は省略するが、Radixを4ずしお、最小冗長シンボル割り圓おで各桁を(-2、-1、0、1、2)の範囲で遞ぶ堎合には、s j+1ずしおkを遞ぶこずができる最倧倀Ukず、最小倀Lkは次のように衚わされる。

そしお残差W(j)が、s(j)ずjから蚈算されるこのUk(j)ずLk(j)の間にあれば、s j+1ずしおkを遞ぶこずができる。

このコラムの敎数のSRT割り算の項で、瞊軞を郚分剰䜙P、暪軞を陀数DずしたP-D Plotを説明したが、この平方根の次の桁の遞択は、敎数の割り算ず同様に、暪軞を郚分平方根(Root:Rず衚わす)、瞊軞を残差(Partial Remainder:PR)ずしたR-PR Plotで衚珟するこずができる。

割り算のP-D Plotでは暪軞は陀数Dであり、蚈算の途䞭で倉化せず䞀定であったが、平方根の堎合は、Rの倀は繰り返しに埓っお倉化する。たた、それよりも問題なのは、Uk、Lkに4^(-(j+1))ずいう項が含たれおおり、繰り返しに埓っお、毎回、Uk、Lkが倉化しおしたう。埓っお、Uk、Lkがjに䟝存しない割り算ず異なり、厳密には、jの倀に応じお次の桁の倀を遞択するテヌブルを切り替える必芁がある。

しかし、j=1ずj=28のU0ずL1をプロットしおみるず、次の図24のようになる。ここで䞊偎の2本の線の䞋の領域はs j+1ずしお"0"を遞んで良い領域であり、䞋偎の2本(殆ど1本のように芋える)の線の䞊偎の領域は、s j+1ずしお"1"を遞んで良い領域である。぀たり、この間の領域は、s j+1ずしお"0"でも"1"でも良いずいう重なりの領域である。

図24:U0ずL1の最倧ず最小のプロット

図24に芋られるように、それぞれの最倧倀ず最小倀の差はあたり倧きくなく、安党サむドでU0の最小倀ずL1の最倧倀をずっおも、重なりの領域は十分残っおいる。このように、Uの䞋限ず、Lの䞊限を䜿っおR-PR Plotを䜜ったのが、図25である。

図25:平方根のR-PRプロット

この図では、S(j)を0.125刻み、4*W(j)を0.25刻みで目盛り線を曞いおいるが、䞀぀のマスに"0"ず"1"、あるいは"1"ず"2"のように異なる倀が入っおいるこずはなく、"0 or 1"あるいは、"1 or 2"ずくっ぀ければ、マスごずに遞択するs j+1の倀を䞀意に決めるこずができる。぀たり、s(j)を4分割し、W(j)偎は、U2のmaxを考えるず0.5刻みで、5.5たでの22分割のテヌブルを䜜れば、平方根の蚈算ができる。

図26:平方根蚈算回路の構成

平方根を蚈算する回路の構成は図26のようになる。Adjustず曞いた箱は、入力オペランドの仮数郚を1.0未満、指数郚を偶数に倉換する回路である。そしお、0.25以䞊、1.0未満に倉換されたオペランドを郚分残差Wの初期倀ずしお出力する。

平方根蚈算回路の心臓郚は、その時点での平方根のs(j)ず郚分残差W(j)の䞊䜍ビットからs j+1を予枬するテヌブルず、s j+1の1、2、3に察しお

を蚈算するMultiple Generatorである。これらの郚分ず平方根レゞスタを陀くず、郚分残差ずCSA、CPAは陀算回路ず同じであり、䞀般的には、これらの郚分を共甚しお、陀算ず平方根の䞡方が蚈算できるナニットずしお実装される。

そしお、指数郚は、Adjustの結果の指数を1/2にしお、曎に、䞞めの圱響を補正しお出力のEXP郚が䜜られる。なお、IEEE 754の䜓系では虚数は扱えないので、笊号郚Sが"1"になった負の数が入力された堎合は非数(NaN)を出力する必芁があるが、図26の回路では、このような異垞凊理に぀いおは省略しおいる。

Multiple Generatorであるが、s j+1は-2+2の範囲の数であるので、最初の項はs(j)を巊シフトし、必芁に応じお2の補数化しおやれば生成でき、第二項もs j+1の2乗は0、1、4であり、それをjの倀に応じお右シフトすれば良いので、比范的容易に生成できる。