(57)【要約】【課題】演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を得ることができる３項入力の浮動小数点加減算器を提供する。【解決手段】入力される3項の指数の大きさが最大の仮数、中間の仮数、最小の仮数に振り分け、指数の大きさが中間の仮数と最小の仮数とをそれぞれ2n+3ビット幅で右シフトして桁合わせを行った仮数と最大の仮数とを出力する前処理回路100と、前処理回路100からの3項の仮数を2項に減らす桁上げ保存加算器(CSA)101と、２項になった仮数の加算を行う桁上げ先見加算器(CLA)102と、最上位ビットが1になるように左シフトする正規化回路103と、上位からn+3ビット目を新たなStickyビットとし、それより下位のビットとの論理和を取って丸めを行う丸め処理回路104と、最終的な指数を出力する指数演算器100とを備える。【選択図】図３
2008152360.tif 000002
【特許請求の範囲】
【請求項１】
３項入力の浮動小数点加減算器において、３項のうち２項の演算で相殺を起こすことを検出する相殺検出手段と、該相殺検出手段により２項の演算で相殺を起こすことが検出されたとき残りの１項を結果として出力する選択手段と、仮数のビット幅をｎとすると、２ｎ＋３ビット幅で桁合わせシフトを行い、最下位ビットをStickyビットとする桁合わせ手段と、そのビット幅で３項の加減算を行う加減算手段と、その結果を正規化し、上位からｎ＋３ビット目を新たなStickyビットとして、ＲＮ（最近値）モードによる丸めを行う丸め処理手段とを有すること特徴とする３項入力の浮動小数点加減算器。
【請求項２】
３項入力の浮動小数点加減算器において、３項のうち２項の演算で相殺を起こすことを検出する相殺検出手段と、該相殺検出手段により２項の演算で相殺を起こすことが検出されたとき残りの１項を結果として出力する選択手段と、仮数のビット幅をｎとすると、２ｎ＋４ビット幅で桁合わせシフトを行い、最下位ビットをStickyビットとする桁合わせ手段と、桁合わせを行った結果、３項のうち２項でシフトによりビットあふれを起こす場合を検出するビットあふれ検出手段と、該ビットあふれ検出手段の出力によりビットあふれが検出されたとき、シフト量を指数の大きさが中間の仮数をｎ＋４に、指数が最小の仮数をｎ＋４とこれら２項の指数の差との和とする桁合わせ手段と、そのビット幅で３項の加減算を行う加減算手段と、その結果を正規化し、上位からｎ＋３ビット目を新たなStickyビットとして、ＲＮ（最近値）、ＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）モードのいずれか１つの丸めモードによる丸めを行う丸め処理手段とを有することを特徴とする３項入力の浮動小数点加減算器。
【請求項３】
３項入力の浮動小数点加減算器において、３項のうち２項の演算で相殺を起こすことを検出する相殺検出手段と、該相殺検出手段により２項の演算で相殺を起こすことが検出されたとき残りの１項を結果として出力する選択手段と、仮数のビット幅をｎとすると、２ｎ＋３ビット幅で桁合わせシフトを行い、最下位ビットをStickyビットとする桁合わせ手段と、そのビット幅で３項の加減算を行う加減算手段と、その結果を正規化し、上位からｎ＋３ビット目を新たなStickyビットとして、ＲＮ（最近値）、ＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）モードのいずれか１つの丸めモードによる丸めを行う第１の丸め処理手段と、３項のうち２項でシフトによりビットあふれを起こす場合を検出するビットあふれ検出手段と、該ビットあふれ検出手段の出力によりビットあふれが検出されたとき、その２項の絶対値の大小関係を検出する大小関係検出手段と、２項の和の符号を求める符号決定手段と、ＲＮ（最近値）、ＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）モードのいずれか１つの丸めモードによる丸めを行う第２の丸め処理手段と、前記第１、第２の丸め処理手段からの結果を選択する選択手段とを有することを特徴とする３項入力の浮動小数点加減算器。
【請求項４】
３項入力の浮動小数点加減算器において、３項のうち２項の演算で相殺を起こすことを検出する相殺検出手段と、該相殺検出手段により２項の演算で相殺を起こすことが検出されたとき残りの１項を結果として出力する選択手段と、仮数のビット幅をｎとすると、３項のうち指数の小さい２項について、２ｎ＋３ビット幅で桁合わせ、加減算、正規化を行い、丸めを行うことなく、残りの１項と２ｎ＋３ビット幅で桁合わせ、加減算を行う演算手段と、その結果を正規化し、上位からｎ＋３ビット目を新たなStickyビットとして、ＲＮ（最近値）、ＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）モードのいずれか１つの丸めモードによる丸めを行う丸め処理手段とを有することを特徴とする３項入力の浮動小数点加減算器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、３項の入力を有する浮動小数点加減算器に係り、特に、演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を得ることができるようにした３項入力の浮動小数点加減算器に関する。
【背景技術】
【０００２】
今日、浮動小数点演算は、科学技術計算やグラフィックス処理等により利用されているため、多くのマイクロプロッセサに浮動小数点演算器が搭載されている。このなかで加減算は、基本的な演算であり、２つの入力に対し演算を行う２項演算器が一般的である。
【０００３】
浮動小数点演算には、標準規格であるＩＥＥＥ７５４に規定されたものがあり、広く用いられている。２項入力の加減算は、ＩＥＥＥ規格では演算過程においてあたかも無限の精度があるかのように扱い、その後で規格に従った丸めを行うことが要請される。有限のビット幅しかもたない演算器で演算過程において無限の精度を実現する一般的な方法として、仮数の下位にGuardビット、Roundビット、Stickyビットの３ビットを付加して演算を行う方法が、例えば、非特許文献１等に記載されて知られている。
【０００４】
図１２は標準規格であるＩＥＥＥ７５４に規定された２項演算の演算過程の仮数の状態を説明する図である。
【０００５】
いま、演算前の第１オペランド、第２オペランドの仮数が図１２（ａ）に示すようなものであるとする。なお、以下に説明する本発明の全ての図面に示される「×」は、０または１の任意の値である。２項演算では、まず、前述した第１オペランド、第２オペランドの２つの項の指数の差を求め、その際、大きい方の指数を中間指数とする。そして、指数の小さい方のオペランドの仮数を前述した２項の指数の差だけ右シフトする。その際、仮数の下位に、丸めの処理を正確に行うことを可能にするため、従来からよく知られているように、Guard ビット、Round ビット、Stickyビットの３ビットを付加した上で右シフトを行う。但し、Stickyビットは、あふれたビット全てとの論理和とする。このときの前述の２つの項の仮数は、図１２（ｂ）に示すようなものとなる。
【０００６】
次に、前述したように右シフトしたビット列と指数の大きい方のビット列とを２項加減算器による演算を行う。この加減算の結果を最上位ビット（ＭＳＢ）が１になるまで左シフトを行い正規化する。また、同時に、中間指数の更新をも行う。その後、ＩＥＥＥ規格に従った丸めモードに応じた丸めを行う。加減算の結果を最上位ビット（ＭＳＢ）が１になるまで左シフトを行い正規化した仮数と丸めを行った結果の仮数とは、図１２（ｃ）に示すようにものとなる。
【０００７】
前述したような加減算を行うことにより、２項演算の場合、演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を得ることができる。
【０００８】
図１３はＩＥＥＥ規格に従った丸めモードの方法を説明する図である。ＩＥＥＥ７５４では、ＲＮ（最近値）、ＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）の４種の丸めモードが定義されている。図１３には、２項加算での結果の符号、仮数の最下位ビット（ＬＳＢ）、Guardビット、Roundビット、Stickyビットの各値と各丸めモードにおける丸め方としての切り上げ、切り捨ての関係を示しており、よく知られた内容であるので、ここでは、これ以上の説明を省略する。
【０００９】
前述した２項入力の加減算演算に対して、３項入力の加減算演算は、(１)あるベクトルの総和をとるといった多数の加算を行う処理の場合、２項ずつ加算を行うより３項ずつ加算を行うことにより処理をより高速化することができ、(２)２つの浮動小数点数の誤差のない和を求めるKnuth の公式（非特許文献２参照）は、浮動小数点加減算を６回必要とするが、３項入力の浮動小数点加算を利用することができれば、２回の浮動小数点加減算で済み、このような演算を多用する多倍長精度演算を高速化することができるという利点を得ることができる。
【００１０】
図１４は浮動小数点数ｘ、ｙの誤差のない和ｘ＋ｙを求めるKnuth の公式による２項入力演算と、３項入力の演算とした場合の演算との様子を示す図である。２項入力の演算器で行う場合、図１４（ａ）に示すように、６回の浮動小数点加減算を必要とする。一方、同一の演算を３項入力の演算器で行う場合、図１４（ｂ）に示すように、２回の浮動小数点加減算で済む。
【００１１】
しかし、２項入力の演算に比較して、３項入力の演算の場合、浮動小数点加減算で正確な結果を出すことが困難となる。ここで、正確な結果とは、演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を出すことを指す。
【００１２】
次に、２項演算の演算方法をそのまま３項演算に拡張した場合に、正確な結果を出すことができないケースについて説明する。なお、以下の説明において、３項入力の第１オペラントをａ、第２オペランドをｂ、第３オペランドをｃとする。
【００１３】
図１５は３項の内２項の演算で相殺が生じることにより正確な結果を出すことができない例を説明する図である。
【００１４】
３項の内２項の演算で相殺が起きる場合、例えば、ａ＝−ｂ、｜ａ｜，｜ｂ｜＞｜ｃ｜である場合を考える。このときａとｂとの演算相殺が起きるため、正しい結果はｃとならなければならない。しかし、図１５に示すように、ｃは絶対値がａ，ｂに比べ小さいため、シフトされてあふれたビットがStickyビットにまとめられてしまい、正確な結果に必要な情報を失ってしまうため、２項演算の演算方法をそのまま３項演算に拡張した場合に、正確な結果を出すことができない。
【００１５】
図１６は３項のうち絶対値の大きい２項の演算で桁落ちが起きるために正確な結果を出すことができない例を説明する図である。
【００１６】
例えば、ａ≒−ｂ、｜ａ｜，｜ｂ｜＞｜ｃ｜の場合を考える。このとき、ａとｂとの演算において桁落ちが起きる。図１６に示すように、ｃは、絶対値がａ，ｂに比べ小さいとしているため、シフトされあふれたビットはStickyビットにまとめられてしまい、正確な結果に必要な情報を失ってしまうため、２項演算の演算方法をそのまま３項演算に拡張した場合に、正確な結果を出すことができない。
【００１７】
図１５により説明した例は、図１６により説明した例の特別なケースと考えられるが、図１５に示す例は、ａ＋ｂ＝０となるためｃの絶対値の大きさにかかわらず結果が厳密にｃとならなければならず、ｃのビットの全てが必要となる。一方、図１６に示す例の場合、ｃの絶対値の大きさによってはｃのビット全てが必要となるとは限らないため、ここでは、図１５に示した例と、図１６に示した例とは、別々のものであるとした。
【００１８】
図１７は３項のうち２項がシフトによりビットあふれを起こすために正確な結果を出すことができない例を説明する図である。ここで説明する例は、｜ａ｜＞＞｜ｂ｜，｜ｃ｜であるものとしてを考える。
【００１９】
図１７に示すようにｂ，ｃが共にシフトによりビットあふれが起こり、あふれたビットがStickyビットにまとめられてしまう。この場合、Stickyビット同士の演算をすることになり、その演算が上位に伝播する可能性があり正しい結果が得られなくなる。また、その演算が上位に伝播しない場合でも、｜ｂ｜≒｜ｃ｜の場合等に、｜ｂ｜，｜ｃ｜の大小関係の情報が失われ、ＩＥＥＥ７５４規格で定義されるＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）の丸めモードにおいて正しく丸めを行うことができなくなってしまう。
【００２０】
３項入力の浮動小数点演算器に関する従来技術として、特許文献１等に記載された技術が知られている。この従来技術は、Round ビットとStickyビットとの間にギャップビットを設け、Stickyビット同士の加算によるキャリーの上位への伝播を防ぐというものである。しかし、この方法は、前述した正確な結果を出すことができない図１５により説明した３項のうち２項で相殺が起きる場合、及び、図１６により説明した３項のうち絶対値の大きい２項の演算で桁落ちが起きる場合に、正確な結果を出すことはできない。また、３項のうち２項がシフトによりビットあふれ起こすことにより正確な結果を出すことができない図１７により説明した例の場合、丸めモードがＲＮ（最近値）の場合は問題ないが、それ以外の丸めモードの場合には完全に解決できるものではなく、演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を得ることができない。
【特許文献１】特開平９−２０４２９４号公報
【非特許文献１】Milos D. Ercegovac著  「Digital Arithmetic」
【非特許文献２】Donald E.Knuth著  「The Art of Computer Programming: Seminumerical Algorithms (Vol2, 3rd Ed)」
【発明の開示】
【発明が解決しようとする課題】
【００２１】
前述で説明したように、３項入力の演算の場合、２項演算の方法をそのまま適用しても、浮動小数点加減算で正確な結果を出すことが困難なるという問題点を有している。
【００２２】
本発明の目的は、前述した従来技術の問題点を解決し、３項入力の浮動小数点加減算を正確に行うことが困難なケースであっても、演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を得ることができる３項入力の浮動小数点加減算器を提供することにある。
【課題を解決するための手段】
【００２３】
本発明によれば前記目的は、３項入力の浮動小数点加減算器において、３項のうち２項の演算で相殺を起こすことを検出する相殺検出手段と、該相殺検出手段により２項の演算で相殺を起こすことが検出されたとき残りの１項を結果として出力する選択手段と、仮数のビット幅をｎとすると、２ｎ＋３ビット幅で桁合わせシフトを行い、最下位ビットをStickyビットとする桁合わせ手段と、そのビット幅で３項の加減算を行う加減算手段と、その結果を正規化し、上位からｎ＋３ビット目を新たなStickyビットとして、ＲＮ（最近値）モードによる丸めを行う丸め処理手段とを有することにより達成される。
【００２４】
また、前記目的は、３項入力の浮動小数点加減算器において、３項のうち２項の演算で相殺を起こすことを検出する相殺検出手段と、該相殺検出手段により２項の演算で相殺を起こすことが検出されたとき残りの１項を結果として出力する選択手段と、仮数のビット幅をｎとすると、２ｎ＋４ビット幅で桁合わせシフトを行い、最下位ビットをStickyビットとする桁合わせ手段と、桁合わせを行った結果、３項のうち２項でシフトによりビットあふれを起こす場合を検出するビットあふれ検出手段と、該ビットあふれ検出手段の出力によりビットあふれが検出されたとき、シフト量を指数の大きさが中間の仮数をｎ＋４に、指数が最小の仮数をｎ＋４とこれら２項の指数の差との和とする桁合わせ手段と、そのビット幅で３項の加減算を行う加減算手段と、その結果を正規化し、上位からｎ＋３ビット目を新たなStickyビットとして、ＲＮ（最近値）、ＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）モードのいずれか１つの丸めモードによる丸めを行う丸め処理手段とを有することにより達成される。
【発明の効果】
【００２５】
本発明によれば、３項入力の浮動小数点加減算を、演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を得ることができるように行うことができる。
【発明を実施するための最良の形態】
【００２６】
以下、本発明による３項入力の浮動小数点加減算器の実施形態を説明するが、その前に、本発明での解決策を簡単に説明する。なお、以下の説明において、３項入力の第１オペラントをａ、第２オペランドをｂ、第３オペランドをｃとする。
【００２７】
（１）３項の内２項の演算で相殺が生じる場合（図１５）の解決策
この場合、相殺が起きるケース（ａ＝−ｂ、ａ＝−ｃ、ｂ＝−ｃ）を加算前に比較器を用いてチェックすることにより、ａ＝−ｂの場合に結果をｃ、ａ＝−ｃの場合に結果をｂ、ｂ＝−ｃの場合に結果をａとなるようにすることにより解決することができる。
【００２８】
（２）３項の内絶対値の大きい２項の演算で桁落ちが発生する場合（図１６）の解決策
図１は３項のうち絶対値の大きい２項の演算で桁落ちが発生する場合（図１６）の解決策を説明する図である。
【００２９】
この場合、各項の仮数部のビット幅をｎビット（最上位の１を含む）とすると、加減算のビット幅を２ｎ＋３ビット以上持たせることにより解決することができる。これについては、最も多くの桁落ちが発生するケースを考えて説明する。ａ、ｂの演算において、桁落ちが発生する場合を考えると、最も多くの桁落ちが発生する場合は、ａ、ｂがともに正、ａ、ｂで引き算、ａの仮数＝１００００．．．０、ｂの仮数＝１１１１１．．．１で、ａの指数＝１、−ｂの指数＝１の場合である。図１に示すように、ａ、ｂの演算で桁落ちが発生すると、結果の有効桁は、ｂの最下位ビットからｎビットとなる。さらに、丸めを行うのに３ビット必要とするため、加減算のビット幅を２ｎ＋３ビット以上とすればよいことになる。これにより、丸めも２項演算と同じ方法により行うことができる。
【００３０】
（３）３項のうち２項がシフトによりビットあふれをする場合（図１７）の解決策
この場合の解決策は３つ考えられ、それぞれ解決策Ａ、Ｂ、Ｃとして以下に説明する。
【００３１】
解決策Ａ
図２は３項のうち２項がシフトによりビットあふれをする場合の解決策Ａを説明する図である。
【００３２】
解決策Ａは、加減算ビット幅を２ｎ＋４ビットとし、２項がシフトによりビットあふれを起こす場合、指数の大きさが中間の仮数のシフト量をｎ＋４に、最小の仮数のシフト量をｎ＋４とこれら２項の指数の差との和とする解決策である。この場合の例を、｜ａ｜＞＞｜ｂ｜＞｜ｃ｜として図２により説明する。いま、図２（ａ）に示すように、単純に指数の差だけｂ、ｃをシフトした場合を考える。この場合、ｂ、ｃの情報は、すべてStickyビットにまとめられてしまい、ｂ、ｃが異符号の場合には、Stickyビット同士で相殺が起こり、ｂ、ｃの大小関係が失われてしまう。その結果、ＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）の丸めモードにおいて正しい丸めを行うことができなくなってしまう。
【００３３】
これに対して、２項がシフトによりビットあふれを起こす場合に、指数の大きさが中間の仮数に対するシフト量をｎ＋４に、最小の仮数に対するシフト量をｎ＋４とこれら２項の指数の差との和とするようにすれば、図２（ｂ）に示すように、加減算後、正規化して上位からｎ＋３ビット目を新たなStickyビットとすることにより、結果的に無限の精度を持って演算を行った後、正規化して上位からｎ＋３ビット目を新たなStickyビットとした場合と同一の結果を得ることができ、正しく丸めを行うことが可能になる。
【００３４】
図２（ｂ）に示す例のように、ａの有効桁とｂ、ｃの有効桁との間のギャップビットが４ビット必要になる理由は、ａの有効桁がｂ、ｃとの加減算により１桁有効桁が落ちる可能性があり、また、ｂ、ｃの加減算により１桁桁上がりが起きる可能性があるためであり、ギャップビットが４ビットあることにより、入力がいかなる場合でも丸め前の状態が無限の精度を持って演算を行った後、結果のビット位置から下位３桁目を新たなStickyビットとした場合と同じ結果となるためである。
【００３５】
解決策Ｂ
解決策Ｂは、シフトによりビットあふれを起こす２項の絶対値の大小関係を出し、正しく丸めが行えるようにするという解決策である。演算する前述の記３項のうち絶対値の大きい２項で桁落ちが発生する場合の解決策で加減算のビット幅が２ｎ＋３ビットあった場合には、３項のうち２項がシフトによりビットあふれをする場合であふれたビットの情報は中間結果の仮数には影響を与えず、丸めに必要な情報のみが失われることになる。そのため、正しい結果を得るには、ビットあふれを起こす２項の絶対値の大小関係（２項の和の符号）を比較器により求め、それをもとに丸めを行えば解決することができる。これが、解決策Ｂである。
【００３６】
解決策Ｃ
解決策Ｃは、絶対値の小さい２項を加算前に検出し、その２項について前記３項のうち２項の演算で桁落ちが発生する場合の解決策である２ｎ＋３ビット幅でシフトして加減算を行い、その結果に対しては丸めを行わず、残りの１項との加算を２ｎ＋３ビット幅で加算を行い、最後に丸めを行うという解決策である。
【００３７】
次に、本発明の実施形態による３項入力の浮動小数点加減算器の具体的な回路例について図面により詳細に説明する。
【００３８】
図３は本発明の第１の実施形態による３項入力の浮動小数点加減算器の構成を示すブロック図である。図３に示す３項入力の浮動小数点加減算器は、前述で（１）、（２）として説明した解決策を採用して構成したものであり、丸めモードがＲＮ（最近値）の場合にのみ演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を得ることができるものであるが、丸めモードがＲＮ（最近値）以外の場合には、正確な結果を得ることができない場合が生じる。
【００３９】
図３に示す３項入力の浮動小数点加減算器は、前処理回路１００と、桁上げ保存加算器（ＣＳＡ）１０１と、桁上げ先見加算器（ＣＬＡ）１０２と、正規化回路１０３と、丸め処理回路１０４と、指数演算器１０５とにより構成される。
【００４０】
前処理回路１００は、入力される第１〜第３オペランドの指数の大きさが最大の仮数、中間の仮数、最小の仮数に振り分け、指数の大きさが中間の仮数と最小の仮数とをそれぞれ２ｎ＋３ビット幅で右シフトして桁合わせを行った仮数と、最大の仮数とを出力すると共に、中間指数として最大の指数を出力する。
【００４１】
桁上げ保存加算器（ＣＳＡ）１０１は、前処理回路１００からの２ｎ＋３ビット幅の前記３項の仮数を２項に減らす演算を行う。また、桁上げ先見加算器（ＣＬＡ）１０２は、２項になった仮数の加算を行い、また、加算の結果が負になった場合、それを絶対値表現に直す。その後、正規化回路１０３は、最上位ビットが１になるように左シフトを行う。次に、丸め処理回路１０４は、上位からｎ＋３ビット目を新たなStickyビットとして、それよりも下位のビットとの論理和を取り、その後に、ＲＮ（最近値）モードによる丸めの処理を行う。丸めのアルゴリズムは、２項加算の場合と全く同一であってよい。指数演算器１０５は、正規化回路１０３、丸め処理回路１０４の結果、及び、中間指数から指数を更新して最終的な指数を出力する。
【００４２】
図４Ａは前処理回路１００の回路構成を示すブロック図、図４Ｂは前処理回路１００に含まれるセレクタの入力と出力との関係を示す真理値表を示す図である。
【００４３】
前処理回路１００は、加減算を実行するための前処理を行うものであり、図４Ａに示すように、指数計算器１０、セレクタ１１、相殺検出器１２、符号比較器１３、インバータ１４〜１６、シフタ１７、１８により構成される。前処理回路１００には、それぞれが符号sign、指数ex、仮数man から構成される第１〜第３オペランドａ〜ｃのデータが入力される。
【００４４】
そして、指数計算器１０は、各入力ａ〜ｃの指数の差を計算する６組の演算器を備えて、計算した指数差を出力する。相殺検出器１２は、比較器と２つのゲート回路との組を３組備えて、これらにより３項のうち２項の演算で相殺が起きる場合を検出する。
【００４５】
セレクタ１１は、指数計算器１０で求めた指数の差の情報と相殺検出器１２が３項のうち２項の演算で相殺が検出されたか否かを示す情報とにより制御される。そして、セレクタ１１は、指数計算器１０で求めた指数の差から指数の大きさが最大の仮数large_man 、中間の仮数medium_man、最小の仮数small_man をそれぞれの出力に振り分け、また、最大指数を持つ項以外の２項の仮数を右シフトするために、シフト量となる最大の指数との差（large_ex-small_ex、large_ex-medium_ex）を出力すると共に、中間指数として最大の指数large_exを出力する。
【００４６】
また、セレクタ１１は、相殺検出器１２が３項のうち２項の演算で相殺されることを検出した場合、相殺を起こす２項の仮数を０として出力するようにし、中間指数として、残りの１項の指数を出力するようにする。
【００４７】
前述したような機能を有するセレクタ１１における入力と出力との関係を表す真理値表を図４Ｂに示しているが、この真理値表についての説明は省略する。
【００４８】
符号比較器１３は、３項の符号を比較して各項の仮数に対して２の補数をとるか否かを判断する。２の補数をとるには、仮数のビットを反転して１を足す必要がある。通常１を足す処理は、加算器の最下位ビットのキャリーインを利用する。３項入力の場合、この１を足す処理が負担となると考えられるが、２の補数をとる項は、たかだか１項で充分であり、３項のうち２項が負となる場合、正の項に対して２の補数をとり、加算処理後、最後に結果の符号を反転させればよい。また、３項の全てが負の場合、全ての項で２の補数をとらずに加算処理後、最後に結果の符号を反転させればよい。このようにすることにより、２の補数をとる際の１を足す処理をたかだか１回にすることができる。符号比較器１３は、どの項に対して２の補数をとるかを判断するものである。
【００４９】
インバータ１４、１５、１６は、前述した符号比較器１３による判断結果の情報に制御されて、各仮数の補数をとるためのビット反転を行う。また、シフタ１７、１８は、指数の大きさが中間の仮数と最小の仮数とについて前述により決定されたシフト量だけ右シフトする。このときのシフトは、２ｎ＋３ビット幅で行い、最下位のビットは、Stickyビットとするためあふれたビットとの論理和となる。但し、２の補数をとるためにビット反転した項については論理積となる。
【００５０】
図５は図４Ａに示した前処理回路１００を利用して、積和演算と加減算との両方を行うことを可能にした演算回路の構成を示すブロック図である。
【００５１】
３項入力の積和演算器は、通常よく知られているように、シフト回路３０１と、乗算アレイ３０２と、桁上げ保存加算器（ＣＳＡ）３０３と、桁上げ先見加算器（ＣＬＡ）３０４と、正規化回路３０５と、丸め処理回路３０６とにより構成されている。この積和演算器を構成する桁上げ保存加算器（ＣＳＡ）３０３と、桁上げ先見加算器（ＣＬＡ）３０４と、正規化回路３０５と、丸め処理回路３０６により構成される部分は、図３により説明した本発明の第１の実施形態における前処理回路１０１を除いた部分の構成と基本的に同一である。
【００５２】
このため、図５に示すように、３項入力の積和演算器の桁上げ保存加算器（ＣＳＡ）３０３の前段に図４Ａにより説明した本発明の第１の実施形態における前処理回路１０１を接続することにより、３項入力の積和演算と３項入力の加減算との両方を行うことを可能にした演算回路を構成することができる。これにより、積和演算と加減算との両方を必要とする場合に、回路を構成する回路部品の量を低減した安価な演算回路を得ることができる。
【００５３】
図６は本発明の第２の実施形態による３項入力の浮動小数点加減算器の構成を示すブロック図である。図６に示す３項入力の浮動小数点加減算器は、前述で（１）、（２）説明した解決策を採用し、また、３項のうち２項がシフトによりビットあふれをする場合の解決方法として解決策Ａを採用して、全ての課題を解決することができるようにしたものである。この本発明の第２の実施形態によれば、４つ全ての丸めモードに対して演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を得ることができる。
【００５４】
図６に示す３項入力の浮動小数点加減算器は、前処理回路１５０と、桁上げ保存加算器（ＣＳＡ）１５１と、桁上げ先見加算器（ＣＬＡ）１５２と、正規化回路１５３と、丸め処理回路１５４と、指数演算器１５５とにより構成される。この３項入力の浮動小数点加減算器の前処理回路１５０以外の部分の構成及び機能は、演算ビット幅が２ｎ＋４とされている点除いて、図３により説明した第１の実施形態の場合と同様である。
【００５５】
すなわち、前処理回路１５０は、入力される第１〜第３オペランドの指数の大きさが最大の仮数、中間の仮数、最小の仮数に振り分け、指数の大きさが中間の仮数と最小の仮数とをそれぞれ２ｎ＋４ビット幅で右シフトして桁合わせを行った仮数と、最大の仮数とを出力すると共に、中間指数として最大の指数を出力する。
【００５６】
桁上げ保存加算器（ＣＳＡ）１５１は、前処理回路１００からの２ｎ＋４ビット幅の前記３項の仮数を２項に減らす演算を行う。また、桁上げ先見加算器（ＣＬＡ）１５２は、２項になった仮数の加算を行い、また、加算の結果が負になった場合、それを絶対値表現に直す。その後、正規化回路１５３は、最上位ビットが１になるように左シフトを行う。次に、丸め処理回路１５４は、上位からｎ＋３ビット目を新たなStickyビットとして、それよりも下位のビットとの論理和を取り、その後に、ＲＮ（最近値）、ＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）モードのいずれか１つの丸めモードによる丸めの処理を行う。丸めのアルゴリズムは、２項加算の場合と全く同一であってよい。指数演算器１５５は、正規化回路１５３、丸め処理回路１５４の結果、及び、中間指数から指数を更新して最終的な指数を出力する。
【００５７】
図７Ａは前処理回路１５０の回路構成を示すブロック図、図７Ｂは前処理回路１５０に含まれるセレクタの入力と出力との関係を示す真理値表を示す図である。
【００５８】
前処理回路１５０は、加減算を実行するための前処理を行うものであり、図７Ａに示すように、指数計算器２００、セレクタ２０１、相殺検出器２０３、符号比較器２１３、インバータ２１２、２０９、２０５、シフタ２１１、２０６、加算器２０４、比較器２０８、セレクタ２１０、２０７により構成される。前処理回路１５０には、それぞれが符号sign、指数ex、仮数man から構成される第１〜第３オペランドａ〜ｃのデータが入力される。
【００５９】
そして、指数計算器２００は、各入力ａ〜ｃの指数の差を計算する６組の演算器を備えて、計算した指数差を出力する。相殺検出器２０３は、比較器と２つのゲート回路との組を３組備えて、これらにより３項のうち２項の演算で相殺が起きる場合を検出する。これらの指数計算器２００、相殺検出器２０３の構成及び機能は、図４Ａに示した指数計算器１０、相殺検出器１２と同一である。
【００６０】
セレクタ２０１は、指数計算器２００で求めた指数の差の情報と相殺検出器２０３が３項のうち２項の演算で相殺が検出されたか否かを示す情報とにより制御される。そして、セレクタ２０１は、指数計算器２００で求めた指数の差から指数の大きさが最大の仮数large_man 、中間の仮数medium_man、最小の仮数small_man をそれぞれの出力に振り分け、また、最大指数を持つ項以外の２項の仮数を右シフトするために、シフト量となる指数の差（medium_ex-small_ex、large_ex-medium_ex)を出力すると共に、中間指数として最大の指数large_exを出力する。
【００６１】
また、セレクタ２０１は、相殺検出器２０３が３項のうち２項の演算で相殺されることを検出した場合、相殺を起こす２項の仮数を０として出力するようにし、中間指数として、残りの１項の指数を出力するようにする。
【００６２】
前述したような機能を有するセレクタ２０１における入力と出力との関係を表す真理値表を図７Ｂに示しているが、この真理値表についての説明は省略する。
【００６３】
符号比較２１３は、３項の符号を比較して各項の仮数に対して２の補数をとるか否かを判断する。２の補数をとるには、仮数のビットを反転して１を足す必要がある。通常１を足す処理は、加算器の最下位ビットのキャリーインを利用する。３項入力の場合、この１を足す処理が負担となると考えられるが、２の補数をとる項は、たかだか１項で充分であり、３項のうち２項が負となる場合、正の項に対して２の補数をとり、加算処理後、最後に結果の符号を反転させればよい。また、３項の全てが負の場合、全ての項で２の補数をとらずに加算処理後、最後に結果の符号を反転させればよい。このようにすることにより、２の補数をとる際の１を足す処理をたかだか１回にすることができる。符号比較器２１３は、どの項に対して２の補数をとるかを判断するものである。
【００６４】
インバータ２０５、２０９、２１２は、前述した符号比較器２１３による判断結果の情報に制御されて、各仮数の補数をとるためのビット反転を行う。比較器２０８は、最大の指数と中間の指数との差が、ｎ＋５以上であることを検出する。ここで、ｎは仮数のビット幅とする。前述の差が、ｎ＋５以上であるという条件が成立した場合、３項のうち２項がシフトによりビットあふれを起こすことになる。セレクタ２１０は、指数が中間の大きさの仮数のシフト量を決定する。すなわち、セレクタ２１０は、３項のうち２項がシフトによりビットあふれをする場合、ｎ＋４を出力し、それに当てはまらない場合、最大の指数との差を出力する。この出力が指数の大きさが中間の仮数のシフト量となる。
【００６５】
加算器２０４は、中間の指数と最小の指数との差とｎ＋４とを加算する。この加算結果は、３項のうち２項がシフトによりビットあふれをする場合の指数の大きさが最小の仮数のシフト量となる。セレクタ２０７は、指数の大きさが最小の仮数のシフト量を決定する。すなわち、セレクタ２０７は、３項のうち２項がシフトによりビットあふれをする場合、前述の加算器２０４の出力を選択し、それに当てはまらない場合、最大の指数と最小の指数との差を選択する。シフタ２０６、２１１は、指数の大きさが中間の仮数と最小の仮数とについて前述により決定されたシフト量だけ右シフトする。このときのシフトは、２ｎ＋４ビット幅で行い最下位のビットはStickyビットとなるためあふれたビットとの論理和となる。但し、２の補数をとるためにビット反転した項については論理積となる。
【００６６】
図８は本発明の第３の実施形態による３項入力の浮動小数点加減算器の構成を示すブロック図である。図８に示す３項入力の浮動小数点加減算器は、前述で（１）、（２）説明した解決策を採用し、また、３項のうち２項がシフトによりビットあふれをする場合の解決方法として解決策Ｂを採用して、全ての課題を解決することができるようにしたものである。この本発明の第３の実施形態によれば、４つ全ての丸めモードに対して演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を得ることができる。
【００６７】
図８に示す３項入力の浮動小数点加減算器は、前処理回路５００と、桁上げ保存加算器（ＣＳＡ）５０１と、桁上げ先見加算器（ＣＬＡ）５０２と、正規化回路５０３と、丸め処理回路５０４と、指数演算器５０６と、セレクタ５０６とにより構成される。
【００６８】
前処理回路５００は、入力される第１〜第３オペランドの指数の大きさが最大の仮数、中間の仮数、最小の仮数に振り分け、中間の仮数と最小の仮数とをそれぞれ２ｎ＋３ビット幅で右シフトして桁合わせを行った仮数と、最大の仮数とを出力すると共に、中間指数として最大の指数を出力する。また、前処理回路５００は、最大の指数と中間の指数との差が、ｎ＋４以上であることを示す信号と、前処理回路５００内で行われた丸めの結果の信号とを出力して、セレクタ５０６に与える。
【００６９】
桁上げ保存加算器（ＣＳＡ）５０１は、前処理回路１００からの２ｎ＋３ビット幅の前記３項の仮数を２項に減らす演算を行う。また、桁上げ先見加算器（ＣＬＡ）５０２は、２項になった仮数の加算を行い、また、加算の結果が負になった場合、それを絶対値表現に直す。その後、正規化回路５０３は、最上位ビットが１になるように左シフトを行う。次に、丸め処理回路５０４は、上位からｎ＋３ビット目を新たなStickyビットとして、それよりも下位のビットとの論理和を取り、その後に、ＲＮ（最近値）、ＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）モードのいずれか１つの丸めモードによる丸めの処理を行う。丸めのアルゴリズムは、２項加算の場合と全く同一であってよい。指数演算器５０５は、正規化回路５０３、丸め処理回路５０４の結果、及び、中間指数から指数を更新して最終的な指数を出力する。また、セレクタ５０６は、３項のうち２項がシフトによりビットあふれを起こす場合の仮数結果と、それ以外の場合の仮数結果とを選択して最終結果を出力する。
【００７０】
図９Ａは前処理回路５００の回路構成を示すブロック図、図９Ｂは前処理回路５００に含まれるセレクタの入力と出力との関係を示す真理値表を示す図、図９Ｃは前処理回路５００に含まれる丸め処理回路の処理を説明する図である。
【００７１】
前処理回路５００は、加減算を実行するための前処理を行うものであり、図９Ａに示すように、指数計算器６００、セレクタ６０１、相殺検出器６０３、符号比較器６１０、インバータ６０５、６０６、６０８、シフタ６０７、６０９、比較器６１１、６１２、丸め処理回路６１３、符号決定回路６１４により構成される。前処理回路５００には、それぞれが符号sign、指数ex、仮数man から構成される第１〜第３オペランドａ〜ｃのデータが入力される。
【００７２】
そして、指数計算器６００は、各入力ａ〜ｃの指数の差を計算する６組の演算器を備えて、計算した指数差を出力する。相殺検出器６０３は、比較器と２つのゲート回路との組を３組備えて、これらにより３項のうち２項の演算で相殺が起きる場合を検出する。これらの指数計算器６００、相殺検出器６０３の構成及び機能は、図４Ａに示した指数計算器１０、相殺検出器１２と同一である。
【００７３】
セレクタ６０１は、指数計算器６００で求めた指数の差の情報と相殺検出器６０３が３項のうち２項の演算で相殺が検出されたか否かを示す情報とにより制御される。そして、セレクタ６０１は、指数計算器６００で求めた指数の差から指数の大きさが最大の仮数large_man 、中間の仮数medium_man、最小の仮数small_man をそれぞれの出力に振り分け、また、最大指数を持つ項以外の２項の仮数を右シフトするために、シフト量となる最大の指数との差（large_ex-small_ex、large_ex-medium_ex)を出力すると共に、中間指数として最大の指数large_exを出力する。
【００７４】
また、セレクタ６０１は、相殺検出器６０３が３項のうち２項の演算で相殺されることを検出した場合、相殺を起こす２項の仮数を０として出力するようにし、中間指数として、残りの１項の指数を出力するようにする。
【００７５】
前述したような機能を有するセレクタ６０１における入力と出力との関係を表す真理値表を図９Ｂに示しているが、この真理値表についての説明は省略する。
【００７６】
符号比較６１０は、３項の符号を比較して各項の仮数に対して２の補数をとるか否かを判断する。２の補数をとるには、仮数のビットを反転して１を足す必要がある。通常１を足す処理は、加算器の最下位ビットのキャリーインを利用する。３項入力の場合、この１を足す処理が負担となると考えられるが、２の補数をとる項は、たかだか１項で充分であり、３項のうち２項が負となる場合、正の項に対して２の補数をとり、加算処理後、最後に結果の符号を反転させればよい。また、３項の全てが負の場合、全ての項で２の補数をとらずに加算処理後、最後に結果の符号を反転させればよい。このようにすることにより、２の補数をとる際の１を足す処理をたかだか１回にすることができる。符号比較器６１０は、どの項に対して２の補数をとるかを判断するものである。
【００７７】
インバータ６０５、６０６、６０８は、前述した符号比較器６１０による判断結果の情報に制御されて、各仮数の補数をとるためのビット反転を行う。比較器６０４は、最大の指数と中間の指数との差が、ｎ＋４以上であることを検出する。ここで、ｎは仮数のビット幅とする。前述の指数の差が、ｎ＋４以上であるという条件が成立した場合、３項のうち２項がシフトによりビットあふれを起こすことになる。指数の差がｎ＋４以上であるという条件が成立した場合、比較器６１１、６１２は、シフトによりビットあふれを起こす２項についての大小関係を判断する。符号決定回路６１４は、比較器６１１、６１２の判断結果をもとに、その２項の和の符号を決定する。丸め処理回路６１３は、決定された２項の和の符号をもとに丸め処理を行う。このときの丸め方法を図９Ｃに示している。前述の比較器６０４の検出結果と丸め処理回路６０３の出力とは、セレクタ５０６に与えられ、丸め処理回路６０３の出力、丸め処理回路５０４の出力の一方がセレクタ５０６から最終結果として出力される。
【００７８】
シフタ６０７、６０９は、指数の大きさが中間の仮数と最小の仮数とについて前述により決定されたシフト量だけ右シフトする。このときのシフトは２ｎ＋３ビット幅で行い、最下位のビットはStickyビットとなるためあふれたビットとの論理和となる。但し、２の補数をとるためにビット反転した項については論理積となる。
【００７９】
図１０は本発明の第４の実施形態による３項入力の浮動小数点加減算器の構成を示すブロック図である。図１０に示す３項入力の浮動小数点加減算器は、前述で（１）、（２）説明した解決策を採用し、また、３項のうち２項がシフトによりビットあふれをする場合の解決方法として解決策Ｃを採用して、全ての課題を解決することができるようにしたものである。この本発明の第４の実施形態によれば、４つ全ての丸めモードに対して演算過程で無限の精度をもって演算した後丸めを行った場合と同一の結果を得ることができる。
【００８０】
図１０に示す３項入力の浮動小数点加減算器は、前処理回路８００と、桁合わせ回路８０１と、桁上げ先見加算器（ＣＬＡ）８０２と、正規化回路８０３と、桁合わせ回路８０４と、桁上げ先見加算器（ＣＬＡ）８０５と、正規化回路８０６と、丸め処理回路８０７と、指数演算器８０８〜８０９とにより構成される。
【００８１】
前処理回路５００は、入力される第１〜第３オペランドの指数の大きさが最大の仮数、中間の仮数、最小の仮数に振り分けて各仮数を出力すると共に、最大の指数と、中間の指数と、中間の指数と最小の指数との差とを出力する。
【００８２】
桁合わせ回路８０１は、指数の大きさが中間の仮数と最小の仮数との加算を行うための桁合わせを行う。前述の２項の指数差だけ指数の大きさが最小の仮数を右シフトする。このときのシフトは２ｎ＋３ビット幅で行い最下位のビットはStickyビットとなるためあふれたビットとの論理和となる。但し、２の補数をとるためにビット反転した項については論理積となる。
【００８３】
桁上げ先見加算器（ＣＬＡ）８０２は、２項の仮数の加算を行い、正規化回路８０３は、最上位ビットが１になるように左シフトを行う。この際、指数演算器８０８は、中間指数の更新を行う。なお、この段階では丸めは行わない。指数演算器８０９は、前述で更新された中間指数と最大の指数との差を求める。桁合わせ回路８０４は、前述の加算結果と指数が最大の仮数との加算を行うための桁合わせを行う。前述の指数差だけ指数の大きさが小さいほうの仮数を右シフトする。この場合も、シフトは２ｎ＋３ビット幅で行い最下位のビットはStickyビットとなるためあふれたビットとの論理和となる。桁上げ先見加算器（ＣＬＡ）８０５は、２項の仮数の加算を行う。そして、正規化回路８０６は、最上位ビットが１になるように左シフトを行う。丸め処理回路８０７は、上位からｎ＋３ビット目を新たなStickyビットとしてそれよりも下位のビットとの論理和をとる。その後、丸め処理回路８０７は、ＲＮ（最近値）、ＲＺ（ゼロ方向）、ＲＰ（＋無限大方向）、ＲＭ（−無限大方向）モードのいずれか１つの丸めモードによる丸めの処理を行い、最終的な仮数を出す。このときの丸めのアルゴリズムは、２項加算の場合と全く同じでよい。指数演算器８１０は、正規化回路８０６、丸め処理回路８０７の結果から指数を更新して最終的な指数を出す。
【００８４】
図１１Ａは前処理回路８００の回路構成を示すブロック図、図１１Ｂは前処理回路８００に含まれるセレクタの入力と出力との関係を示す真理値表を示す図である。
【００８５】
前処理回路８００は、加減算を実行するための前処理を行うものであり、図１１Ａに示すように、指数計算器９００、セレクタ９０１、相殺検出器９０３、符号比較器９１０、インバータ９０５、９０６、９０８により構成される。前処理回路８００には、それぞれが符号sign、指数ex、仮数man から構成される第１〜第３オペランドａ〜ｃのデータが入力される。
【００８６】
そして、指数計算器９００は、各入力ａ〜ｃの指数の差を計算する６組の演算器を備えて、計算した指数差を出力する。相殺検出器９０３は、比較器と２つのゲート回路との組を３組備えて、これらにより３項のうち２項の演算で相殺が起きる場合を検出する。これらの指数計算器９００、相殺検出器９０３の構成及び機能は、図４Ａに示した指数計算器１０、相殺検出器１２と同一である。
【００８７】
セレクタ９０１は、指数計算器９００で求めた指数の差の情報と相殺検出器６０３が３項のうち２項の演算で相殺が検出されたか否かを示す情報とにより制御される。そして、セレクタ９０１は、指数計算器９００で求めた指数の差から指数の大きさが最大の仮数large_man 、中間の仮数medium_man、最小の仮数small_man をそれぞれの出力に振り分け、また、はじめに最大以外の２項の仮数を加算するためそれらの指数の差を出力すると共に、最大の指数、中間の指数、及び、中間の指数と最小の指数との差（medium_ex-small_ex）を出力するまた、セレクタ９０１は、相殺検出回路９０３が３項のうち２項の演算で相殺を起こすことを検出した場合、相殺を起こす２項の仮数を０として出力するようにして、中間指数は残りの１項の指数を出力するようにする。
【００８８】
前述したような機能を有するセレクタ９０１における入力と出力との関係を表す真理値表を図１１Ｂに示しているが、この真理値表についての説明は省略する。
【００８９】
符号比較９１０は、３項の符号を比較して各項の仮数に対して２の補数をとるか否かを判断する。２の補数をとるには、仮数のビットを反転して１を足す必要がある。通常１を足す処理は、加算器の最下位ビットのキャリーインを利用する。３項入力の場合、この１を足す処理が負担となると考えられるが、２の補数をとる項は、たかだか１項で充分であり、３項のうち２項が負となる場合、正の項に対して２の補数をとり、加算処理後、最後に結果の符号を反転させればよい。また、３項の全てが負の場合、全ての項で２の補数をとらずに加算処理後、最後に結果の符号を反転させればよい。このようにすることにより、２の補数をとる際の１を足す処理をたかだか１回にすることができる。符号比較器９１０は、どの項に対して２の補数をとるかを判断するものである。そして、インバータ９０５、９０６、９０８は、前述した符号比較器６１０による判断結果の情報に制御されて、各仮数の補数をとるためのビット反転を行う。
【産業上の利用可能性】
【００９０】
浮動小数点演算を必要とするマイクロプロセッサに組み込み、前記のような加算処理を多用する演算や多倍長精度演算に利用できる。
【図面の簡単な説明】
【００９１】
【図１】３項のうち絶対値の大きい２項で桁落ちが発生する場合（図１６）の解決策を説明する図である。
【図２】３項のうち２項がシフトによりビットあふれをする場合の解決策Ａを説明する図である。
【図３】本発明の第１の実施形態による３項入力の浮動小数点加減算器の構成を示すブロック図である。
【図４Ａ】図３の前処理回路の回路構成を示すブロック図である。
【図４Ｂ】図３の前処理回路に含まれるセレクタの入力と出力との関係を示す真理値表を示す図である。
【図５】図４Ａに示した前処理回路を利用して、積和演算と加減算との両方を行うことを可能にした演算回路の構成を示すブロック図である。
【図６】本発明の第２の実施形態による３項入力の浮動小数点加減算器の構成を示すブロック図である。
【図７Ａ】図６の前処理回路の回路構成を示すブロック図である。
【図７Ｂ】図６の前処理回路に含まれるセレクタの入力と出力との関係を示す真理値表を示す図である。
【図８】本発明の第３の実施形態による３項入力の浮動小数点加減算器の構成を示すブロック図である。
【図９Ａ】図８の前処理回路の回路構成を示すブロック図である。
【図９Ｂ】図８の前処理回路に含まれるセレクタの入力と出力との関係を示す真理値表を示す図である。
【図９Ｃ】図８の前処理回路に含まれる丸め処理回路の処理を説明する図である。
【図１０】本発明の第４の実施形態による３項入力の浮動小数点加減算器の構成を示すブロック図である。
【図１１Ａ】図１０の前処理回路の回路構成を示すブロック図である。
【図１１Ｂ】図１０の前処理回路に含まれるセレクタの入力と出力との関係を示す真理値表を示す図である。
【図１２】標準規格であるＩＥＥＥ７５４に規定された２項演算の演算過程の仮数の状態を説明する図である。
【図１３】ＩＥＥＥ規格に従った丸めモードの方法を説明する図である。
【図１４】浮動小数点数ｘ、ｙの誤差のない和ｘ＋ｙを求めるKnuth の公式による２項入力演算と、３項入力の演算とした場合の演算との様子を示す図である。
【図１５】３項の内２項の演算で相殺が生じることにより正確な結果を出すことができない例を説明する図である。
【図１６】３項のうち絶対値の大きい２項で桁落ちが起きるために正確な結果を出すことができない例を説明する図である。
【図１７】３項のうち２項がシフトによりビットあふれを起こすために正確な結果を出すことができない例を説明する図である。
【符号の説明】
【００９２】
１０、２００、６００、９００  指数計算器１０
１１、２０１、２０７、２１０、５０６、６０１、９０１  セレクタ
１２、２０３、６０３、９０３  相殺検出器
１３、２１３、６１０、９１０  符号比較器
14〜16、205、209、212、605〜608、905、906、908  インバータ
１７、１８、２０６、２００、６０７、６０９  シフタ
１００、１５０、５００、８００  前処理回路
１０１、１５１、５０１  桁上げ保存加算器（ＣＳＡ）
１０２、１５２、５０２、８０２、８０５  桁上げ先見加算器（ＣＬＡ）
１０３、１５３、５０３、８０３、８０６  正規化回路
１０４、１５４、５０４、６１３、８０７  丸め処理回路
１０５、１５５、５０６、８０８〜８０９  指数演算器
２０４  加算器
２０８、６１１、６１２  比較器
６１４  符号決定回路
８０１、８０４  桁合わせ回路
【図１】
2008152360.tif 000003
【図２】
2008152360.tif 000004
【図３】
2008152360.tif 000005
【図４Ａ】
2008152360.tif 000006
【図４Ｂ】
2008152360.tif 000007
【図５】
2008152360.tif 000008
【図６】
2008152360.tif 000009
【図７Ａ】
2008152360.tif 000010
【図７Ｂ】
2008152360.tif 000011
【図８】
2008152360.tif 000012
【図９Ａ】
2008152360.tif 000013
【図９Ｂ】
2008152360.tif 000014
【図９Ｃ】
2008152360.tif 000015
【図１０】
2008152360.tif 000016
【図１１Ａ】
2008152360.tif 000017
【図１１Ｂ】
2008152360.tif 000018
【図１２】
2008152360.tif 000019
【図１３】
2008152360.tif 000020
【図１４】
2008152360.tif 000021
【図１５】
2008152360.tif 000022
【図１６】
2008152360.tif 000023
【図１７】
2008152360.tif 000024