(57)【特許請求の範囲】
【請求項１】
除算を行なう際に与えられた除数より、その逆数の近似値を獲得して、これを初期値としてニュートンラフソン法の反復計算を一回以上行なって必要な精度の逆数を求めて、これを被除数に乗じて除算を行なう演算方式で、
ニュートンラフソン法の反復計算を行なう回路を専用に設け、ニュートンラフソン法の反復計算の際に初期値を演算に必要な最低限の精度に丸めることによって下位ビットをゼロとし、このゼロに丸めた部分を扱う部分積生成部と乗算結果の上位ビットが０又は１の連続であるビット部分に関わる部分積生成部と乗算結果の下位ビットにおいて必要最低限の精度に不要なビット部分に関わる部分積生成部とを予め省略することによって反復計算に用いられる乗算回路中の部分積生成部の一部の実装を省くとともに、該乗算回路中の加算木において省略した該部分積生成部の生成する部分積の累算に係る回路を省略して回路規模を縮小した専用の乗算器を用いることを特徴とする演算方式。
【請求項２】
ニュートンラフソン法の反復計算の式を変形して差分を分離し、この差分の演算に必要な情報が少ないことを利用して、反復計算に用いられる乗算回路の一部を省略したことを特徴とする、請求項１に記載の演算方式。
【請求項３】
開平計算を行なう際に与えられた引数より、その開平値の逆数の近似値を獲得して、これを初期値としてニュートンラフソン法の反復計算を一回以上行なって必要な精度の開平値の逆数を求めて、これを引数に乗じて開平計算を行なう演算方式で、ニュートンラフソン法の反復計算を行なう回路を専用に設け、ニュートンラフソン法の反復計算の際に初期値を演算に必要な最低限の精度に丸めることによって下位ビットをゼロとし、このゼロに丸めた部分を扱う部分積生成部と乗算結果の上位ビットが０又は１の連続であるビット部分に関わる部分積生成部と乗算結果の下位ビットにおいて必要最低限の精度に不要なビット部分に関わる部分積生成部とを予め省略することによって反復計算に用いられる乗算回路中の部分積生成部の一部の実装を省くとともに、該乗算回路中の加算木において省略した該部分積生成部の生成する部分積の累算に係る回路を省略して回路規模を縮小した専用の乗算器を用いることを特徴とする演算方式。
【請求項４】
ニュートンラフソン法による逆数の計算又は開平値の逆数の計算において、逆数計算で用いられる除数Ｒmと、その真の逆数値Ｙ∞とそれを求めるニュートンラフソン法の反復計算の初期値Ｙ0との対応、又は開平計算の引数Ｒ'mとその真の開平値の逆数値Y'∞と、それを求めるニュートンラフソン法の反復計算の初期値Ｙ'0の対応があるとき、（この項において、以下は逆数計算に関して記述するが、以後開平値の逆数計算においては、Ｙ∞をＹ'∞、Ｙ0をＹ'0で読み替えて適用する）、ニュートンラフソン法の初期値ＹcとしてＹ∞-δ-≦Ｙx≦Ｙ∞＋δ+である事が求められるときに、δ-（但しδ-≧０）とδ+（但しδ+≧０）のうち絶対値の小さい方をδaと置き、引数Ｒmに対応して与えられたＹ0について、Ｙ∞-δa≦Ｙ0≦Ｙ∞＋δaである範囲で初期値Ｙ0を表現するビットベクトルのうち特定のビットより下位ビットを全て０にする様に丸めてからニュートンラフソン法の演算を行い、反復計算に用いられる乗算の一部を省略する事を特徴とする、請求項１〜３いずれか一項に記載の演算方式。
【請求項５】
ニュートンラフソン法の初期値ＹzとしてＹ∞-δ-≦Ｙz≦Ｙ∞+δ+が求められ、一方初期値Ｙ0が与えられた時に、δ-（但しδ-≧０）とδ+（但しδ+≧０）のうち絶対値の小さい方をδbと置き、Ｙ0＋２m≦Ｙ∞+δaの条件を満たす最大の整数ｍを求め、２(m-1)の位より以下を２mの位に切り上げて、２(m-1)の位も含めてこれより下位ビットを全て０に丸めた値を新たな初期値Ｙ0としてニュートンラフソン法の演算を行い、反復計算に用いられる乗算の一部を省略する事を特徴とする、請求項１〜４いずれか一項に記載の演算方式。
【請求項６】
ニュートンラフソン法の初期値ＹxとしてＹ∞-δ-≦Ｙz≦Ｙ∞＋δ+が求められ、一方初期値Ｙ0が与えられた時に、δ-（但しδ-≧０）とδ+（但しδ+≧０）のうち絶対値の小さい方をδaと置き、Ｙ∞−δk≦Ｙ0−２mの条件を満たす最大の整数ｍを求め、２(m-1)の位を含めてこれより以下を切り捨てて、２(m-1)の位も含めてこれより下位ビットを全て０に丸めた値を新たな初期値Ｙ0としてニュートンラフソン法の演算を行い、反復計算に用いられる乗算の一部を省略する事を特徴とする、請求項１〜４いずれか一項に記載の演算方式。
【請求項７】
ニュートンラフソン法の初期値ＹzとしてＹ∞−δ-≦Ｙx≦Ｙ∞＋δ+が求められ、一方初期値Ｙ0が与えられた時に、δ-（但しδ-≧０）とδ+（但しδ+≧０）のうち絶対値の小さい方をδzと置き、Ｙ∞−δz≦Ｙ0＋２m≦Ｙ∞＋δzを満たす最大の整数ｍを求め、２(m-1)の位で０捨１入を行い、2(m-1)の位も含めてこれより下位ビットを全て０に丸めた値を新たな初期値Ｙ0としてニュートンラフソン法の演算を行い、反復計算に用いられる乗算の一部を省略する事を特徴とする、請求項１〜４いずれか一項に記載の演算方式。
【請求項８】
逆数計算を行うニュートンラフソン法においてＹ∞−δ-≦Ｙ0≦Ｙ∞＋δ+である初期値Ｙ0が与えられた時に、δ-（但しδ-≧０）とδ+（但しδ+≧０）のうち絶対値の大きい方をδzと置き、２n≧δzである最低の整数ｎを求めて、ニュートンラフソン法の反復計算の中に現れる乗算Ｒm・Ｙ0又は２の補数を用いた上に１．０の位を操作するβ＝１−Ｒm・Ｙ0の演算において、２(n+2)の位も含めてこれより上位のビットに関する演算を全て省略し、２(n+1)の位を含めてこれより下位のビットの演算のみを行って、２nの位におけるビットを符号ビットとして扱う符号付の数値を算出することを特徴とする請求項１、２、４〜６いずれか一項に記載の演算方式。
【請求項９】
開平値の逆数計算を行うニュートンラフソン法においてＹ'∞−δ-≦Ｙ'0≦Ｙ'∞＋δ+である初期値が与えられた時に、δ-（但しδ-≧０）とδ+（但しδ+≧０）のうち絶対値の大きい方をδaと置き、２p≧（δa+δa2／２）である最低の整数ｐを求めて、ニュートンラフソン法の反復計算の中に現れる乗算Ｒ'm・（Ｙ'p2）又は２の補数表現を用いた上に１．０の位を操作する２β'＝（１−Ｒ'm・（Ｙ'02））の演算において、２(p+2)の位も含めてこれより上位のビットに関する演算を全て省略し、２(p+2)の位を含めてこれより下位のビットの演算のみを行って、２(p+2)の位におけるビットを符号ビットとして扱う符号付の数値を算出することを特徴とする請求項３〜６のいずれか一項に記載の演算方式。
【請求項１０】
逆数計算のニュートンラフソン法反復計算と開平値の逆数のニュートンラフソン法反復計算において、乗算Ｒm・Ｙ0と乗算Ｒ'm・Ｙ'02とを同一の乗算回路で処理し、同時に、乗算Ｙ0・βとＹ'0とβ'とを同一の乗算回路で処理する事で、逆数計算と開平値の逆数計算に用いる演算回路を共通とする事を特徴とする請求項１〜９のいずれか一項に記載の演算方式。
【請求項１１】
初期値と除数の積を、１．０より減じた値を元に、級数計算を無限に行ない、これに初期値を乗じる事で逆数の演算精度を高めたことを特徴とする、請求項１、２、４〜１０のいずれか一項に記載の演算方式。
【請求項１２】
初期値と除数の積を、１．０より減じた値を元に、有限項の級数計算を行ない、これに初期値を乗じる事で逆数の演算精度を高めたことを特徴とする、請求項１、２、４〜１０のいずれか一項に記載の演算方式。
【請求項１３】
級数計算の一部の値を表としてメモリに格納し、初期値と除数の積を１．０より減じた値を表現するビット配列より抽出したビットフィールドの内容をインデックスとして表を索いた値を、級数計算の一部と置き換える事で逆数の演算精度を高めたことを特徴とする、請求項１１又は１２に記載の演算方式。
【請求項１４】
除算において、
0003598096.tif 000031
〔β＝（１−Ｙ0・Ｒm）
Ｙ0は初期値、Ｒmは除数の仮数部〕
の値を表としてメモリに格納し、初期値と除数の積を、１．０より減じた値を表現するビット配列より抽出したビットフィールドの内容をインデックスとして表より索いた値を用いて、
0003598096.tif 000032
に示される計算で逆数を得る、請求項１１記載の演算方式。
【請求項１５】
除算において、
0003598096.tif 000033
の値を表としてメモリに格納し、初期値と除数の積を、１．０より減じた値を表現するビット配列より抽出したビットフィールドの内容をインデックスとして表より索いた値を用いて、
0003598096.tif 000034
に示される計算を行って逆数を求める、請求項１１記載の演算方式。
【請求項１６】
除算において、
0003598096.tif 000035
の値を表としてメモリに格納し、初期値と除数の積を、１．０より減じた値を表現するビット配列より抽出したビットフィールドの内容をインデックスとして表より索いた値を用いて、
0003598096.tif 000036
に示される計算を行う、請求項１１記載の演算方式。
【請求項１７】
Ｙ＝Ｙ0・(１＋β＋β2)
に示される計算を行う、請求項１２記載の演算方式。
【請求項１８】
Ｙ＝Ｙ0・(１＋β＋β2＋β3)
に示される計算を行う、請求項１２記載の演算方式。
【請求項１９】
開平計算を行うに当たって
0003598096.tif 000037
［但しＲ'mは与えられた引数の仮数部、
またＹ'0はＲ'mの開平値の逆数の近似値でニュートンラフソン法反復演算の初期値］
の計算を行い、引き続き
0003598096.tif 000038
に示される級数計算を無限に、または第ｎ次の項までの計算を行って演算精度を向上させる請求項３〜１０のいずれか一項に記載の演算方式。
【請求項２０】
開平計算を行うに当たって
0003598096.tif 000039
[但しＲ'mは与えられた引数の仮数部、
またＹ'0はＲ'mの開平値の逆数の近似値でニュートンラフソン法反復演算の初期値]
の計算を行い、引き続き
Ｙ2＝Ｙ0・(1＋β'＋β'2＋1.5β'3＋2.5β'4＋β'5)
の計算を行うことを特長とする請求項３〜１０のいずれか一項に記載の演算方式。
【請求項２１】
開平計算を行うに当たって
1.5β'3＋2.5β'4＋β'5
[但しＲ'mは与えられた引数の仮数部、
またＹ'0はＲ'mの開平値の逆数の近似値でニュートンラフソン法反復演算の初期値]
の値を表としてメモリに格納し、β'を表現するビット配列より抽出したビットフィールドの内容をインデックスとして表より索いた値を用いて、
Ｙ2＝Ｙ0・(1＋β'＋β'2＋1.5β'3＋2.5β'4＋β'5)
の計算を行って演算精度を向上させることを特徴とする請求項３〜１０のいずれか一項に記載の演算方式。
【請求項２２】
β値(但しＹ０を初期値、Ｒｍを除数の仮数部としてβ＝（１−Ｙ０・Ｒｍ）である)で表される級数計算を行う逆数計算又は、β’(但しＲ’ｍを与えられた引数の仮数部、 またＹ’０をＲ’ｍの開平値の逆数の近似値でニュートンラフソン法反復演算の初期値としてβ’＝ （１−Ｙ’０２・Ｒ’ｍ）／２である)で表される級数計算を行う開平値の逆数計算において、級数計算に供する回路の全てまたは一部を共用することを特長とする請求項１１〜２１のいずれか一項に記載の演算方式。
【請求項２３】
逆数計算を行うに際して、与えられた除数の仮数部を表現するビット配列をＭＳＢの１ビットを除き３つのビットフィールドに分けて、そのうちＭＳＢ側のビットフィールドの内容をインデックスとしてメモリから２つの値を索き、これらと中間のビットフィールドの内容とを用いて一次近似を行なって初期値を計算する際に、除数の仮数部Ｒmが０．５≦Ｒｍ＜１．０に正規化されている時に、
0003598096.tif 000040
［ｄは初期値として許される誤差、ｘmは０．５≦ｘa＜１．０の範囲をとる］
で示されるｗ（ｘn）でＲmの定義域を割ったＳ0、即ちＳ0＝０．５／ｗ（ｘn）を求め、次にＳ0≦２Kを満たす最小の整数Ｋを求め、Ｒmの定義域を２K個の区分に均等割して、各区分で一次近似を行って初期値を得ることを特徴とする請求項１、２、３〜１８のいずれか一項に記載の演算方式。
【請求項２４】
浮動小数点数系の逆算計算において与えられた除数、又は開平計算において与えられた引数の、仮数部を表現するビット列をＭＳＢの１ビットを除き３つのビットフィールドに分けて、そのうちＭＳＢ側のビットフィールドの内容をインデックスとしてメモリから値を索き、これらと中間のビットフィールドの内容とを用いて一次近似を行なって初期値を計算するにおいて、
ルックアップテーブル型のプログラマブルロジックデバイスに回路を実装し、ルックアップテーブルを小型のＲＯＭメモリとして用いて、これに、初期値計算に用いる表を格納して実装することを特徴とする、請求項１〜２３のいずれか一項に記載の演算方式。
【請求項２５】
除算ないし逆数計算において、ルックアップテーブル型のプログラマブルロジックデバイスに演算回路を実装し、ルックアップテーブルを小型のメモリとして用い、これに級数計算の一部の値の表を格納することを特徴とする請求項１３〜１６のいずれか一項に記載の演算方式。
【請求項２６】
初期値計算、反復計算、１．０より初期値と除数の積を減じた値を用いた計算において、連続する加算と乗算の組み合わせに冗長表現の演算回路を用いて演算時間を短縮した、請求項１、２、４〜１８、２３〜２５のいずれか一項に記載の演算方式。
【発明の詳細な説明】
技術分野
本発明は計算機における演算方式に関する。さらに詳しくは除算・開平計算において、ニュートンラフソン法を用いて逆数や、開平値の逆数を求めて、これを用いて除算や開平計算を行う演算方式に関する。
本明細書の中で、特に断らない限り、単精度の浮動小数点形式というときは、ＩＥＥＥ−７５４規格における単精度の浮動小数点数のデータ形式、即ち、符号部１ビット・指数部８ビット・仮数部２３ビット（但し常に１であるＭＳＢを補って仮数部の精度は２４ビットである）からなるデータ形式を例として、逆数演算や除算を実現する方法について述べる。
これは説明の為の仮定であって、実際に本発明で述べる演算方式に則って回路を実装する際には必要とする演算精度に応じて、各パラメータを調整すれば良い。
背景技術
浮動小数点除算並びに開平計算は、四則演算の中でも最も時間を要する演算項目である。除算を実現するには大別して減算シフト型除算、表と演算を組み合わせる方法、乗算型除算（代表的なものとしてニュートンラフソン法）がある。開平計算でも、減算とシフトと条件判断を組み合わせる方法、表と演算を組み合わせる方法、ニュートンラフソン法がある。
減算シフト型除算では、最も単純にはプログラムでシフト命令・加減算命令（減算命令または加算命令）・条件分岐命令を組み合わせて１ビットずつ商を算出する方法があげられる。また、マイクロプログラミングでシフト・減算又は加算を反復処理する手法も実装されており、前述の命令を組み合わせる場合よりも高速に処理を行なえる。
減算シフト型除算において、より高速に除算を処理する方法としてＳＲＴ法がある。これは除数と被除数を上位から数ビットずつ取り、それらを基にして数ビットの商をえたり、あるいはそれらをインデックスとして表を検索して数ビットずつ商を得る操作を繰り返して必要な精度の商を得る手法で、上記の１ビットずつ商を得る手法に比べて処理のステップ数を削減する。ＬＳＩに実装された減算シフト型と乗算型の除算器の比較によれば高基数のＳＲＴ法が有利ともされる。
除算を行なう為に表と演算を組み合わせる方法も提案されている。これは、表をＲＯＭに格納し、除数の仮数部を表現するビット配列の一部をビットフィールドとして抽出して、その内容をインデックスとして表から得た値をもとに計算を行なって逆算を求め、これを被除数に乗じて除算を実現する方法である。
乗算型除算の代表的なアルゴリズムとして、ニュートンラフソン法（以下Ｎ／Ｒ法と記す）がある。これは、与えられた除数の逆数の近似値Ｙ0を得て、
Ｙn+1＝Ｙn・(２−Ｙn・Ｒm)
[Ｒｍは除数の仮数部]
に示される反復計算を行なって所定の精度の逆数を得て、これを被除数に乗じて除算を実現する方法である。
開平計算についても同様で、与えられた引数の開平値Ｒ'mの逆数Ｙ'∞の近似値Ｙ'0を得て、
0003598096.tif 000002
[Ｒ'mは除数の仮数部]
に示される反復計算を行なって所定の精度の開平値の逆数を得て、これを引数に乗じて開平を実現する方法である。
減算シフト型の除算では、１ステップを処理する度に条件を判定する必要があるので、プログラミングでシフト命令・加減算命令・条件分岐命令を組み合わせて実現する場合には演算に多大な時間を要するという問題がある。また、命令間にデータ依存があるために命令パイプライン構成を持つアーキテクチャの計算機を用いても処理速度を向上させるのが困難であるという問題がある。
減算シフト型除算を、マイクロプログラミングでシフト・加減算を反復して実行する場合には、前述の個々の命令を組み合わせる方法に比べれば高速に処理できるが、単独の加算命令・減算命令・乗算命令（以下まとめて加減乗算命令という）に比較すると多大な処理時間を要するという問題がある。
高基数のＳＲＴ法では、前述の単純な減算シフト型除算に比べて高速ではあるが、依然多くのステップ数を必要とするという問題がある。また、高基数のＳＲＴ法を実装するには、得られた暫定解を元に乗算器を用いて減数を算出して減算を行う回路を構成するか、起こりうる暫定解に対応した減数を予め算出しておいて得られた暫定解に応じた減算を行なう為に減数を選択するセレクタを構成する必要があり。演算に要する時間の面でも使用する資源の面でも、この手法は必ずしも有利ではない。
また、減算シフト型除算では、一つの除算を行っている間は、回路資源を反復使用する為に、演算回路が占有されて、次の除算を開始する事が出来ず、スループットを向上させる事が出来ないという問題がある。
表と演算を組み合わせる方法も、小型といえども単精度の演算を行なう為には数十〜数百キロビットの容量のメモリを要求するため、ＬＳＩ上に実装するには、やはり実装効率が悪いという問題がある。
Ｎ／Ｒ法の除算においては、従来は初期値の表をメモリに格納し、与えられた除数の仮数部を表現するビット配列のうち、ＭＳＢ側より必要なビットフィールドを抽出し、これをインデックスとして初期値を取り出して、反復計算に供する回路が実装されていた。
既存の実装の例では８ビット程度の精度の表を用いる例が多く見受けられたが、単精度の逆数を得るには反復計算を２回行なう必要があり、加減乗算命令を組み合わせて反復計算を行う場合には時間を要するという問題がある。
一回の反復で２４ビットの精度を得るには、初期値として最低１２ビットの精度が必要であり、これを直接表として作成する場合には１２ビット幅４０９６ワード、即ち４９１５２ビット（６キロバイト）容量のメモリが最低でも必要である。
実際には演算のためのガードビットも必要であり、この数倍の容量が要求されるので、ＬＳＩ上に構成するには大きな面積を占有して効率が悪いとう問題がある。また、現在市販されているプログラマブルロジックデバイス（以下ＰＬＤと略す。なお、ここでいうＰＬＤにはＣＰＬＤ、即ちコンプレックス・プログラマブル・ロジック・デバイス、やＦＰＧＡ、即ちフィールド・プログラマブル・ゲート・アレイ等のプログラマブルなデバイスも含む）の類には搭載することが出来ないという問題がある。
この他にも、１２ビットの精度の初期値を得て、一回の反復計算を行なう場合には、
Ｙn+1＝Ｙn・(２−Ｙn・Ｒm)
[Ｒmは除数の仮数部]
に示される漸化式、より具体的には
Ｙ1＝Ｙ0・(２−Ｙ0・Ｒm)
に示される演算を行なうが、この計算を別途演算命令を組み合わせて実現する場合には、複数の命令間にデータ依存が生じ、命令パイプラインや演算パイプラインを持つプロセッサでは効率良く処理できず、また、演算装置の使用のコンフリクトが生じ、反復計算を行っている間は演算器を占有して、他の命令を実行出来ないという問題がある。
既存の乗算器に改変を施して、従来の単純な２４ビット×２４ビットの演算を行なうモードと、初期値Ｙ0と除数の仮数部Ｒmの積を算出しつつこれを２．０から減じるモードの、二つのモードを備えた演算器も用いられている。後者のモードは積の２の補数をとって上位ビットを操作するので、ほとんど回路を追加すること無く実現できる。しかし、この場合にも反復計算と他の演算を並行して行なうことができず、性能が落ちるという問題がある。また、Ｎ／Ｒ法の反復に、同じ乗算器を繰り返し用いる事から、一つの除算が終了するまで次の除算を開始できずスループットを向上させる事が出来ないという問題がある。
また、Ｎ／Ｒ法で高い精度（ここでは仮に単精度の倍の４８ビットを例とする）の逆数を算出する場合には、初期値として２４ビットの精度の逆数を与えて１回の反復計算を行うか、１２ビットの精度の逆数を与えて２回反復を行う必要があり、前者の場合には必要とする表が大きくなるという問題がある。一方で後者の場合には２回目の反復計算を行う回路が大きくなり、かつ演算時間が延びるという問題がある。
この他に、回路資源に強い制約のあるＰＬＤには、大型の表を搭載する事が出来ず、Ｎ／Ｒ法による逆数計算や除算が実装出来ないという問題がある。
開平計算を実装する場合においても、略同様の問題がある。
発明の開示
上述の諸問題を解決し、小型・低レイテンシ・高スループットな逆数演算回路を用いた除算回路並びに、開平値の逆数演算回路を用いた開平回路を提供することを課題として本発明はなされた。
具体的には、まずＮ／Ｒ法の初期値を得るのに用いる表を小型にする手段を与える。即ち、表に初期値そのものを格納するのではなく、小型の表から検索した値を演算器に入力して初期値を算出することにより、表の大きさが小さくても済むような演算手法を与える、更には、必要になる表の最低限の大きさや、表の内容を決定する手段を与える。
次に、得た初期値よりＮ／Ｒ法による反復計算を行って必要な精度の逆数や、開平値の逆数を算出する際に、プログラミングによって演算命令を組み合わせて計算することによる計算時間の増大を避ける為に、反復計算を行う専用回路を構成し、パイプライン化することによりスループットを向上させる事が可能な回路を与える。更には、その専用回路に要する回路資源を節約し、回路規模を小さくし、演算時間を短縮する演算回路の構成を与える。
また、Ｎ／Ｒ法で高い精度の逆数や、開平値の逆数を算出するために、初期値として高い精度の逆数の近似値を必要とせず、また、反復回数を増加させることなく、計算で得られる逆数や、開平値の逆数の精度を向上させる演算回路の構成を与える。
また、ＰＬＤ上にＮ／Ｒ法を用いた逆数計算回路や開平値の逆数計算回路と、それを用いた除算回路や開平計算回路を効率良く実装する方法を与える。
以下の説明では除算や、逆数計算においては、浮動小数点形式で表現された除数Ｒの仮数部Ｒｍ１００（以下除数の仮数部１００と呼ぶ）に注目する。単に除数というときは、特に断らない限り与えられた除数Ｒの仮数部１００（Ｒｍ）を指す。
また、開平計算や、開平値の逆数計算においては、浮動小数点形式で表現された引数Ｒ'の仮数部Ｒ'm４００（以下引数の仮数部４００と呼ぶ）に注目する。単に引数というときは、特に断らない限り与えられた引数Ｒ'の仮数部４００（Ｒ'm）を指す。
いずれも、本明細書においては、０．５≦ＲmsＲ'm＜１．０の範囲に正規化されているものとする。
本発明では、除算においてはＮ／Ｒ法で除数の逆数を求めて、これを別途の乗算命令で被除数に乗じて商を得る形で除算を実現する。あるいは、Ｎ／Ｒ法で得られた逆数を被除数に乗じる回路を追加して、除算を実現する。
また、開平計算においてはＮ／Ｒ法で、引数の開平値の逆数を求めて、これを別途の乗算命令で引数に乗じて開平値を得る。あるいは、Ｎ／Ｒ法で得られた引数の開平値の逆数を引数に乗じる回路を追加して、開平演算を実現する。
請求項１にかかる発明では、Ｎ／Ｒ法の反復計算そのものを演算回路として実装するとき、与えられた初期値１０４を、演算のガードビットを含み最低限必要な精度に丸めて、下位ビットを０とすることで、Ｎ／Ｒ法の反復計算回路を簡略化する。
その構造の概略を図５に示す。除数の仮数部１００と被除数の仮数部５０１が与えられており、初期値計算回路５０４、補正器付き乗算器５０３、乗算器５０２からなる。ここで逆数１０６を取り出して別途乗算命令で被除数の仮数部５０１に乗じてもよいし、これを被除数の仮数部５０１に乗ずる乗算器５０６を接続して、商の仮数部５０７を算出してもよい。
初期値計算回路５０４は与えられた除数の仮数部１００より、その逆数の近似値、即ちＮ／Ｒ法の初期値１０４を算出するもので、従来は除数の仮数部１００を表現するビット配列からビットフィールドを抽出し、その内容をインデックスとして表から初期値を索いた。
この初期値計算回路５０４には、除数の仮数部１００の逆数の、より粗い近似値を基にＮ／Ｒ法の反復を行って、必要な精度の逆数を求める回路をあてて、その出力を初期値１０４として用いても良い。あるいは他の簡便な逆数計算回路を用いてもよい。
補正器（単に積を出力するのではなく、得られた積に対して加工を施す回路または機能）付き乗算器５０３は、２．０から初期値１０４と除数の仮数部１００の積を減じる演算を行って値５０５を出力するが、積の２の補数をとった上で２．０の位を操作すれば良いので、使用する素子数及び演算時間は、単純な乗算回路とほとんど変わらない。
請求項２にかかる発明は、値１０６を得る際に、
Ｙ1＝Ｙ0・(2−Ｙ0・Ｒm)
を変形して
Ｙ1＝Ｙ0＋ΔＹ
を経て
Ｙ0
と
ΔＹ＝Ｙ0・(1−Ｙ0・Ｒm)＝Ｙ0・β
に分けて、一度差分１０９（ΔＹ）を計算してから最終的に逆数１０６を得る手法である。
具体的には
β＝(1−Ｙ0・Ｒm)
に示される、初期値１０４と除数の仮数部１００の積を、１．０より減じた値１１１をβとおき、これに初期値１０４を乗じて差分１０９として、更に初期値１０４を加えて逆数１０６を得る。
この発明は開平値の逆数の計算にも適用できる。
請求項２にかかる演算回路の構成の例を図６に示す。これは、初期値１０４と除数の仮数部１００の積を、１．０より減じて値１１１を求めた例である。式の変形を行うことによって、補正器付き乗算器６０１において部分積の一部を省略し、また、乗算器６０３においても部分積の一部を省略する。
補正器付き乗算器６０１は、
β＝(1−Ｙ0・Ｒm)
に示された計算を行うもので、初期値１０４と除数の仮数部１００の積を、１．０より減じる演算を行うが、積の２の補数をとった上で１．０の位を操作すれば良い。また、その演算結果の値１１１の絶対値は、値５０５の絶対値より小さい。
補正器付き乗算器６０１で得た結果の値１１１に、初期値１０４を乗じて得た積１０８に、初期値１０４を、経路６０２を通して加算器６０４を用いて加算して、値１０６を算出する構造を取る。この加算器を、乗算器６０３の加算木の一部として繰り入れて、ブロック６０５を一つの演算器として構成しても良い。これはブロック４０９、７０７、８０５、９０４、１００４、１８０７、１９０８でも同様である。
請求項３にかかる発明では、開平値の逆数をＮ／Ｒ法で求める時に、反復計算そのものを演算回路として実装するとき、与えられた初期値４００を、演算のガードビットを含み最低限必要な精度に丸めて、下位ビットを０とすることで、Ｎ／Ｒ法の反復計算回路を簡略化する。
その構造の概略を図４に示す。引数の仮数部４００が与えられており、初期値計算回路４０１、補正器付き乗算器４０５、乗算器４０７からなる。ここで開平値の逆数４１１を取り出して別途乗算命令で引数４００に乗じてもよいし、これを引数の仮数部４００に乗ずる乗算器４１２を接続して、開平値４１３を算出してもよい。
請求項４にかかる発明では、請求項１乃至３における、初期値の下位ビットの省略可能な範囲を示す。
請求項５にかかる発明では、請求項１乃至３における、初期値の下位ビットの具体的な省略の手法について、切り上げ手法を用いたケースについて示す。
請求項６にかかる発明では、請求項１乃至３における、初期値の下位ビットの具体的な省略の手法について、切り下げ手法を用いたケースについて示す。
請求項７にかかる発明では、請求項１乃至３における、初期値の下位ビットの具体的な省略の手法について、０捨１入、即ち、丸める当該位が０だったら切り捨て、１だったら切り上げを行うケースについて示す。
請求項８にかかる発明では、請求項２における、差分を分離して計算する発明につき、より詳細に省略可能なビットの位置を特定する手法を示す。
請求項９にかかる発明では、請求項２並びに請求項８に掛かる発明を、開平値の逆数の計算に適用した手法を示す。
請求項１０にかかる発明では、逆数計算と、開平値の逆数計算とで、共通の演算を行う部分を共有する演算方式について述べる。この演算方式に基づく実装の例を図１８に示す。セレクタ１８０１、１８０３、１８０９を有し、逆数計算の際には（Ｄ）側、開平値の逆数計算では（Ｒ）側の入力を出力へ導く。また、補正器付き乗算器１８０５は、開平値の逆数計算の時は上段を、逆数計算の時は下段を行う。
請求項１１にかかる発明では、
β＝(1−Ｙ0・Ｒm)
に示される、初期値１０４と除数の仮数部１００の積を、１．０より減じた値１１１をβとおき、これを用いて逆数の演算精度を向上させる。
即ち、逆数計算におけるＮ／Ｒ法の漸化式
Ｙn+1＝Ｙn・(2−Ｙ0・Ｒm)
をｎ回、反復したときの値１５０は、初期値１０４と、値１１１だけを用いて
0003598096.tif 000003
の形で表現されるので、これを計算する回路を実装する。
尚、反復を無限回数繰り返して、精度を無限に高めた場合の値１５１（Ｙ∞）は、初期値１０４と値１１１を用いて
0003598096.tif 000004
と表現される。また、級数計算を第ｎ次の項で打ち切った場合の値Ｙxは、
0003598096.tif 000005
に表現される。この時の誤差は、
Ｙ∞＝Ｙx＋δｙ
を経て
0003598096.tif 000006
に示される値δｙに拠る。
請求項１２にかかる発明では、級数計算を有限個行う
0003598096.tif 000007
の計算を行う回路を実装する。その概略を図７に示す。尚、図７では順次値１１１を乗じてｎ次の値を得ているが、二乗、三乗等の、階乗計算を行なう回路を用いて、値１１１から直接ｎ次の値を算出しても良い。これは図８や図１０でも同様である。
請求項１３にかかる発明では、級数計算の一部の値を表としてメモリに格納し、値１１１を表現するビット配列のうちＭＳＢ側から適当なビット幅のビットフィールドを抽出し、これをインデックスとして表から値を索き、これを級数計算の一部の代わりとして用いる。この表を索く操作は請求項１４ないし１６の発明においても同様である。
メモリに格納する表の値には、あるｎ次の項より高次の、無限個の項の合計の値を用いても良いし、必要な精度が得られるという条件の下で有限個の項で打ち切った、合計の値を用いても良い。
請求項１３にかかる発明において、三次迄の項を個別に計算し、四次以降の高次の項を合計した値８０１を表にしてメモリ８０６に格納した場合を例とした演算回路を図８に示す。
請求項１４にかかる発明では、
0003598096.tif 000008
の値を表としてメモリ９０５に格納し、値１１１を表現するビット配列のＭＳＢ側からビットフィールドを抽出し、その内容をインデックスとして、表から値を索いて、
0003598096.tif 000009
の計算を行う回路を実装する。図９がその構成である。
請求項１５にかかる発明では、
0003598096.tif 000010
の中の項１５５
0003598096.tif 000011
の値を表としてメモリ１００５に格納し、値１１１を表現するビット配列から抽出したビットフィールドの内容をインデックスとして、表から項の値を索いて、
0003598096.tif 000012
の計算を行う回路を実装する。図１０がその構成である。
請求項１６にかかる発明では、
0003598096.tif 000013
の中の項１５６
0003598096.tif 000014
の値を表としてメモリ８０６に格納し、値１１１の値をインデックスとして、表から項の値を索いて、該計算を行う回路を実装する。図８がその構成に相当する。
請求項１７にかかる発明では、
Ｙ＝Ｙ0・(1＋β＋β2)
の計算を行う回路を実装する。その構成は図７より乗算器７０２と乗算器７０３を除いた形をとる。
請求項１８にかかる発明では、
Ｙ＝Ｙ0・(1＋β＋β2＋β3)
の計算を行う回路を実装する。その構成は図７より乗算器７０３を除いた形をとる。
請求項１９にかかる発明では、開平値の逆数を計算するに当たって、引数４００、初期値４０１より、
0003598096.tif 000015
によって値β'（値４０２）を算出し、この高次関数の式、
0003598096.tif 000016
にて開平値の逆数を高い精度で算出する。図１９にその例を示す。
図１９は４次の項までの計算を行った例である。
請求項２０にかかる発明では、開平値の逆数を計算するにあたって、引数４００、初期値４０１、値４０２を用いて、
Ｙ2＝Ｙ0・(1＋β'＋β'2＋1.5β'3＋2.5β'4＋β'５)
に示される演算を行い、初期値４０２より２回の反復演算で得られるのと同様の精度の開平値の逆数を得る。必要な演算精度に応じて適宜級数の次数を下げてもよい。
図１９は、この計算より５次の項を省略した形の演算回路を示す。
請求項２１にかかる発明は、開平値の逆数の計算をするにあたって、級数の一部を表とし、メモリ２００１に格納し、値４０２を表現するビット配列のＭＳＢ側からビットフィールドを抽出し、その内容をインデックスとして、表から値を索いて、計算を行う。図２０に、実装の例を示す。
請求項２２にかかる発明では、補正器付き乗算回路１８０５、乗算回路２１０１、２１０２、２１０３、２１０６、などを、逆数計算回路と、開平値の逆数計算回路とで共有して級数計算による演算回路をコンパクトに実装する。
図２２にその構成例を示す。セレクタ１８０９、１８０１、１８０３、２１０９、２１１０、補正器付乗算回路１８０５によって、逆数計算と、開平値の逆数計算を切り替える。
請求項２３にかかる発明では、初期値１０４として要求される、逆数の近似値に許される誤差１７２１が与えられたときに、一次近似に用いる表の、最低限の大きさを示す式を与える。
請求項２４にかかる発明では、逆数計算を行う回路をＰＬＤ上に搭載する際に、ＬＵＴをＲＯＭメモリとして用い、ここに初期値計算回路の中に用いられる表を格納する。複数のＬＵＴを接続して、より大きなＲＯＭメモリを構成して、ここに表を格納しても良い。図１１にその例を示す。１１０３がＬＵＴをメモリセルとして用いたメモリであり、１１０４がＬＵＴを接続してより大容量のメモリを構成する役割を果たすＬＵＴである。
請求項２５にかかる発明では、級数計算を行う回路をＰＬＤ上に搭載する際に、ＬＵＴをＲＯＭメモリとして用い、ここに級数計算の一部の値の表を格納する。複数のＬＵＴを接続して、より大きなＲＯＭメモリを構成して、ここに表を格納しても良い。
請求項２６にかかる発明では、初期値計算、反復計算、１．０より初期値と除数の積を減じた値を用いた計算において、乗算が連続する部分、あるいは、加減算と乗算が交互に連続する部分で、冗長表現の演算方式を用いて、演算時間を短縮する。
【図面の簡単な説明】
図１は、除数の仮数部を構成するビット列を３つのビットフィールドに区分する様子を示す説明図である。
図２は、本発明の一実施態様において、初期値を得る様子を示す説明図である。
図３は、本発明の一実施態様において、初期値を得るための回路構成図である。
図４は、本発明の一実施態様において、初期値を得るための回路構成図である。
図５は、本発明の一実施態様において、Ｎ／Ｒ法の反復計算そのものを演算回路として実装した回路構成図である。
図６は、本発明の一実施態様の回路構成図である。
図７は、本発明の一実施態様の回路構成図である。
図８は、本発明の一実施態様の回路構成図である。
図９は、本発明の一実施態様の回路構成図である。
図１０は、本発明の一実施態様の回路構成図である。
図１１は、本発明の一実施態様において、ルックアップテーブルをＲＯＭとして用いて、ここに初期値計算回路で用いられる表を格納した様子を示す説明図である。
図１２は、曲線ｙ＝１／ｘの一部を示す。
図１３は、図１２の曲線の一部拡大図である。
図１４は、図１３の曲線の一部拡大図である。
図１５は、Ｎ／Ｒ法の反復計算回路を簡略化する様子を示す説明図である。
図１６は、Ｎ／Ｒ法の反復計算回路を簡略化する様子を示す説明図である。
図１７は、一次補間の区分数の解析説明図である。
符号の説明
１００  除数の仮数部
１０４  初期値
１０６  逆数
１２０、１２１  ビットフィールド
３０１、３０２  メモリ
３０３  乗算回路
３０４  減算回路
５０１  被除数の仮数部
５０２、５０６、６０３、７０１、７０２、７０３、７０５、８０３、９０３、１００３  乗算器
５０３、６０１  補正器付き乗算器
５０４  初期値計算回路
５０７  商の仮数部
６０４、７０４、７０６、８０２、８０４、９０２、９０４、１００２、１００４  加算器
７０１、９０１、１００１  メモリ
発明を実施する為の最良の形態
以下に単精度計算に請求項１にかかる発明を適用した実施例をあげる。図１に示すビット列で表される除数の仮数部１００（Ｒm）が与えられたとき、この上位からＭＳＢの１ビットをおいて、５ビットを取りビットフィールド１２０（Ｎx）とおく。また引続き９ビットを取りビットフィールド１２１（Ｎy）とおく。そして、除数１００の定義域０．５≦Ｒm＜１．０を３２区分して、各区分において１２ビットの精度で初期値を獲得する。
図１２は、
0003598096.tif 000017
の曲線の一部であり、除数の仮数部１００の定義域０．５≦Ｒm＜１．０と、その逆数Ｙ＝１／Ｒmの値域（但し１．０＜１／Ｒｍ≦２．０）が取る部分１２０１を拡大して図１３に示す。
図１３に於いて定義域を３２の区分に分割し、ビットフィールド１２０（Ｎx）の値を用いて与えられた除数に近い区分を取る。濃色部１３０１で示された柱状部分が選択された区分で、この中で一次近似を行なう。この部分を拡大したものを図１４に示す。
一次の近似計算を行なう回路構成が図３に示される。各々の区分において一次近似に必要になるのは、各区分における逆数の近似値３０６と、その区分での一次近似に用いられる線分の傾きの値３０５であり、前者に１４ビット幅３２ワードのメモリ３０１と、後者に９ビット幅３２ワードのメモリ３０２の、２つのメモリが充てられる。併せて７３６ビット容量のメモリを用意すれば足りる。
回路は、１４ビット３２ワードのメモリ３０１、９ビット３２ワードのメモリ３０２と、乗算器３０３、減算器３０４からなる。メモリ３０２より索いた傾きの値３０５とビットフィールド１２１を、乗算器３０３で乗じて、この積を、減算器３０４を用いてメモリ３０１より索いた近似値３０６より減じて、初期値１０４を算出する。
選択された区分に於けるＹ＝１／Ｒｍの近似値３０６を、フィールド１２０をインデックスとして小容量メモリ３０１より索く。同時にこの区分に於ける線分１４０１の傾きの値３０５を小容量メモリ３０２より索く。引続きフィールド１２１の値を傾き３０５に乗じて近似値３０６より減じ、
Ｙ0＝ΔＢ[Ｎx]−ΔＥ[Ｎx]・Ｎy
より初期値１０４を得る。これは除数の仮数部１００の逆数として１２ビット以上の精度を持つ。
この他にも、当該区分の一次近似の線分１４０１の左端と右端に於ける近似値を各々２つのメモリに格納し、ビットフィールド１２１によって中点をとる回路を用いて近似値を算出する方式でも良い。
こうして得た初期値１０４より、２４ビット精度の逆数１０６を得るには、
Ｙ1＝Ｙ0・(2−Ｙ0・Ｒm)
を計算すれば良い。
単精度の除算において、請求項１、２、３〜９にかかる発明を適用した実施例を図１５や図１６に示す。初期値１０４は精度が１２ビットなので、演算のガードビット２ビットを加えてＭＳＢより１４ビットを取り、残りＬＳＢ側の１０ビットをゼロとする。これにより、ＭＳＢより１４ビット分の演算を行えばよい。この手法はＮ／Ｒ法を反復する際の途中結果にも用いられる。
図１５は、除数の仮数部１００と初期値１０４の各々２４ビットの仮数部の乗算に於ける部分積５７６項（領域１５０１）を示すが、前述の様に有意なビットの位置に注意すれば、濃色部１５０２（淡色領域１５０３を含む）の部分積だけを考慮すれば良い。
尚、領域１５０３の部分は、必要とする演算精度が低くても良いならば、ＬＳＢ側から相応の程度の項について省略しても良い。この場合、省略した項の代わりに適切な定数項を付け足す事で演算精度をある程度、維持することもできる。
得られた積１５０６を丸めると共に、その２の補数をとって、１．０の位を操作して値１１１を算出する。
また、値１１１の上位ビットは必ず全て１（Ｙ０×Ｒm＞１．０のとき）か、全て０（Ｙ０×Ｒm≦１．０のとき）になる。そのため、部分積１５０４に当る位までを計算し、その位が０か１かを判定すれば、それより上位のビットの状態もわかる。これより、領域１５０５の部分積の項の計算も省略できる。
引き続き、更に値１０４を乗ずる。その様子を図１６に示す。これは図６のブロック６０５に相当する。この時にも無効なビットにかかわる演算を省略して領域１６０２に示された濃色部分の項について計算を行なえば良い。また、加算器６０４及び減算器１６０５は乗算の中に構成される加算木の一項として扱い、ブロック６０５を一つの演算器として構成しても良い。値１１１の上位ビット（部分積１５０４の位）の状況によって、減算器１６０５によって積１６０４から、初期値１０４を減ずるか否かを定める。
なお淡色領域１６０３の部分は必要とする演算精度が低くても良いならば、ＬＳＢ側から相応の程度の項について省略してもよい。この場合、省略した項の代わりに適切な定数項を付け足す事で演算精度をある程度、維持することもできる。
上記の様にして初期値の算出とＮ／Ｒ法の反復からなる単精度の逆数計算そのものが実装できる。使用する回路資源は、反復計算の為に従来の乗算器を二つ追加する場合に比べて小さい。
請求項１５にかかる実施例を図１７を用いて説明する。
0003598096.tif 000018
による曲線があるとき、これより初期値１０４に許される許容誤差１７２１上方の曲線を
0003598096.tif 000019
で、また下方の曲線を
0003598096.tif 000020
で表す。この二つの式に挟まれた着色領域１７２０内に初期値があれば、Ｎ／Ｒ法反復計算で所定の精度の逆数を得られるものとする。
値１７０６において曲線
0003598096.tif 000021
に接する線分を表す
0003598096.tif 000022
（あるいは
0003598096.tif 000023
）を考える。また、これが
0003598096.tif 000024
と交わる点を各々解１７０７、解１７０８とする。
この解１７０７と解１７０８においては、
0003598096.tif 000025
と
0003598096.tif 000026
は等しい事を利用して、
0003598096.tif 000027
を立て、この解を求める事によって解１７０７と解１７０８の間の距離を求める。この式は
0003598096.tif 000028
と同値であり、その解が
0003598096.tif 000029
であることから、２解間の距離は値１７１２で与えられる。
許容誤差１７２１に、所望の許容誤差を代入する事で、解の距離は数１７１２によって求まり、これによって、与えられた除数の定義域（０．５≦Ｒm＜１．０）をどれだけの区分に分ければ良いかが分かる。
尚、
0003598096.tif 000030
より、Ｒm＜１．０の範囲ではさらに多少の誤差が許容される事がわかり、この範囲内で演算精度を下げて回路を減らす事が出来る。
請求項２１にかかる発明の実施例を図１９に示す。乗算器１９０９、１９０４については、乗数1.５や乗数2.５を表すビット配列のうち、有意なビットは２ビットだけであるので、被乗数を適宜シフトして加算器２１０５に入力する。
産業上の利用可能性
請求項１または３にかかる発明を用いる事により、ニュートンラフソン法の反復演算を回路に実装するにあたって、乗算回路の一部を省略して回路規模を小さくすると共に演算速度を向上させる。同時に、演算資源の利用の衝突を回避する事が出来、完全に演算データの流れが一方方向となって、回路全体をパイプライン化して演算のスループットを向上させる事ができる。
請求項２または３にかかる発明を用いる事により、ニュートンラフソン法の反復演算を回路に実装するにあたって、乗算回路の一部を省略して回路規模を小さくすると共に演算速度を向上させる。同時に、演算資源の利用の衝突を回避する事が出来、完全に演算データの流れが一方方向となって、回路全体をパイプライン化して演算のスループットを向上させる事ができる。
請求項４乃至７にかかる発明を用いる事により、初期値を表現する有意なビットを削減し、これを用いて演算する回路、特に乗算回路の一部を省略する事が可能となる。これにより、回路規模を小さくすると共に、演算速度を向上させる。
請求項８並びに９にかかる発明を用いる事により、反復計算の途中に表れる値を表現する有意なビットを削減し、これを用いて演算する回路、特に乗算回路の一部を省略する事が可能となる。これにより、回路規模を小さくすると共に、演算速度を向上させる。
請求項１０にかかる発明を用いる事により、少ない回路資源で逆数演算と、開平値の逆数演算を、効率良く処理できる。
請求項１１にかかる発明を用いる事で、従来のＮ／Ｒ法では、演算精度を向上させる為に、反復回数を追加して行なう必要があり、一回の反復で２回の乗算を行う必要があったものが、小規模な乗算器を追加することで演算精度を向上させる事が可能となり、回路規模を小さくすると共に演算速度を向上させる事が出来る。また、乗算器７０５を用いて、級数に乗ずる初期値１０４の有意なビットは少なく、乗算器７０５に要する回数が少なくてすむ。更に、乗算器に加えて階乗計算器を追加することで、演算時間を増やさずに演算精度を向上させることが可能となる。また、高次の項の値を表に組み入れて、容易に精度を向上させる応用が広がる。
請求項１２にかかる発明を用いる事で、従来のＮ／Ｒ法では、演算精度を向上させる為に、反復回数を追加し、一回の反復につき２回の乗算を追加する必要があったものが、小規模な乗算器を追加するのみで演算精度を向上させる事が可能となり、回路規模を小さくすると共に演算速度を向上させる事が出来る。乗算器に加えて階乗計算器を追加することで、演算時間を増やさずに演算精度を向上させることが可能となる。また、乗算器８０３を用いて、級数に乗ずる初期値１０４の有意なビットは少なく、乗算器８０３に要する回路が少なくてすむ。これは、乗算器９０２、１００２でも同様である。
請求項１３にかかる発明を用いる事で、級数計算の一部、即ち乗算器や階乗計算器を表を格納したメモリに置き換えることが可能となり、回路規模を小さくすると共に演算速度を向上させる事が出来る。特に、級数計算を途中で打ち切りつつ、更に数ビット演算精度を向上させる場合には有用である。
請求項１４にかかる発明を用いる事で、例えば１２ビット精度の初期値を与えて２４ビット精度の逆数を得ていたところへ、更に数ビット演算精度を向上させて、ガードビットを作り出すことが可能となる。
請求項１５にかかる発明を用いる事で、例えば初期値に１７ビットの精度の逆数を与えることで、容易に５１ビットの精度の逆数を得ると共に、表を用いて２ビット以上演算精度を追加する事で、ＩＥＥＥ７５４の倍精度演算を行えるようになる。或いは、初期値に１８ビットの精度の逆数を与えることで、容易に５４ビットの精度の逆数を得ると共に、表を用いて更に演算精度を追加することで、ＩＥＥＥ７５４の倍精度演算において十分なガードビットを提供できる。
請求項１６にかかる発明を用いる事で、例えば１２ビット精度の初期値を与えて、容易に４８ビットの精度に拡張すると共に、表を用いて５〜６ビットの演算精度を追加する事で、ＩＥＥＥ７５４の倍精度演算を行えるようになる。或いは、倍精度で逆数を求めて、これを単精度の被除数に乗ずる事で、除算全体の結果にＩＥＥＥ単精度の演算規格に則った丸めを施す事が可能となる。
請求項１７にかかる発明を用いる事で、例えば初期値に１８ビットの精度の逆数を与えることで、容易に５４ビットの精度の逆数を得て、ＩＥＥＥ７５４の倍精度演算において十分な逆数を得られる。
請求項１８にかかる発明を用いる事で、例えば１２ビット精度の初期値を与えて、４８ビットの逆数を得て、これを単精度の被除数に乗じて、除算全体でＩＥＥＥ単精度の規格に則った丸めを施すことが可能となる。或いは、１４ビットの精度の初期値を与えてＩＥＥＥ７５４の倍精度（５３ビット精度）の演算を行う事が可能となる。
請求項１９にかかる発明を用いる事で、従来のＮ／Ｒ法では、演算精度を向上させる為に、反復回数を追加し、一回の反復につき２回の乗算を追加する必要があったものが、小規模な乗算器を追加するのみで演算精度を向上させる事が可能となり、回路規模を小さくすると共に演算速度を向上させる事が出来る。乗算器に加えて階乗計算器を追加することで、演算時間を増やさずに演算精度を向上させることが可能となる。また、乗算器１９０６を用いて、級数に乗ずる初期値４０２の有意なビットは少なく、乗算器１９０６に要する回路が少なくてすむ。
請求項２０にかかる発明を用いる事で、例えば１２ビット精度の初期値を与えて、４８ビットの逆数を得て、これを単精度の被除数に乗じて、除算全体でＩＥＥＥ単精度の規格に則った丸めを施すことが可能となる。或いは、１４ビットの精度の初期値を与えてＩＥＥＥ７５４の倍精度（５３ビット精度）の演算を行う事が可能となる。
請求項２１にかかる発明を用いる事で、級数計算の一部、即ち乗算器や階乗計算器を表を格納したメモリに置き換えることが可能となり、回路規模を小さくすると共に演算速度を向上させる事が出来る。特に、級数計算を途中で打ち切りつつ、更に数ビット演算精度を向上させる場合には有用である。
請求項２２にかかる発明を用いる事で、逆数計算と開平値逆数計算とで回路資源を共有し、少ない回路資源で２つ演算機能を実現できる。
請求項２３にかかる発明を用いる事で、必要最低限の表の大きさ、すなわちメモリ容量を算出して、要求される演算精度の仕様を満たしつつ最小規模の回路を設計する事が可能となる。
請求項２４にかかる発明を用いる事で、初期値計算に用いられる表をルックアップテーブルに格納し、回路資源に強い制約のあるＰＬＤ上にも逆数演算回路や除算回路を実装する事が可能となる。
請求項２５にかかる発明を用いる事で、級数の値の表をルックアップテーブルに格納し、回路資源に強い制約のあるＰＬＤ上でも演算精度を容易に向上させる事が可能となる。
請求項２６にかかる発明を用いる事で、乗算が連続し、あるいは乗算と加減算が交互に行われる本発明の回路の演算速度を向上させる事が出来る。
【図１】
0003598096.tif 000041
【図２】
0003598096.tif 000042
【図３】
0003598096.tif 000043
【図４Ａ】
0003598096.tif 000044
【図４Ｂ】
0003598096.tif 000045
【図５】
0003598096.tif 000046
【図６】
0003598096.tif 000047
【図７】
0003598096.tif 000048
【図８】
0003598096.tif 000049
【図９】
0003598096.tif 000050
【図１０】
0003598096.tif 000051
【図１１】
0003598096.tif 000052
【図１２】
0003598096.tif 000053
【図１３】
0003598096.tif 000054
【図１４】
0003598096.tif 000055
【図１５】
0003598096.tif 000056
【図１６】
0003598096.tif 000057
【図１７】
0003598096.tif 000058