(57)【特許請求の範囲】
【請求項１】
被除数を除数で除算して、正確に丸め処理された商を生成する除算と、正確に丸め処理された平方根を生成する、ある値の開平算のうち少なくとも１つを実行する浮動小数点算術演算装置であって、前記算術演算装置が、
データを記憶するためのマルチポート記憶装置、
２つの数を乗算して積を求め、２つの数を加算して和を求める算術演算手段、
除算、及び開平算のうちの少なくとも１つについて演算結果の近似値を提供する近似手段、
タッカーマン検査を用いて除算、及び開平算のうちの少なくとも１つの演算結果の近似値を正確に丸め処理するための手順を含む丸め処理マイクロコード、及び
前記浮動小数点算術演算装置を制御する制御装置からなり、
前記丸め処理マイクロコードが、演算結果の近似値が過小評価された値になるようにし、タッカーマン検査を早期終了させることによって、演算結果の近似値を正確に丸め処理して、正確に丸め処理された結果を生成する、浮動小数点算術演算装置。
【請求項２】
前記丸め処理マイクロコードが演算結果の近似値を正確に丸め処理する手段を含み、前記丸め処理手段が、
タッカーマン検査を実行して演算結果の近似値をどのように丸め処理するかを判定する手段、
タッカーマン検査の中間結果の符号をチェックする手段、及び
前記中間結果の符号に基づいて、タッカーマン検査の実行終了を早め、演算結果の近似値を正確に丸め処理する手段を含むことを特徴とする、請求項１に記載の浮動小数点算術演算装置。
【請求項３】
前記丸め処理マイクロコードが、演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価したものになるようにする過小評価手段を更に含むことを特徴とする、請求項２に記載の浮動小数点算術演算装置。
【請求項４】
前記丸め処理マイクロコードが演算結果の近似値を正確に丸め処理して、正確に丸め処理された演算結果を生成する丸め処理手段を含み、前記丸め処理手段が、
タッカーマン検査を実行して演算結果の近似値をどのように丸め処理するかを判定する手段、
所定の値をタッカーマン検査の中間結果と比較して比較結果を生成する手段、及び
前記比較結果に基づいてタッカーマン検査の実行終了を早め、演算結果の近似値を正確に丸め処理する手段を含むことを特徴とする、請求項１に記載の浮動小数点算術演算装置。
【請求項５】
前記丸め処理マイクロコードが、演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価した値になるようにする過小評価手段を更に含むことを特徴とする、請求項４に記載の浮動小数点算術演算装置。
【請求項６】
拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を、正確に丸め処理して、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、及び開平算の演算結果の近似値を受信するステップ、
(b)演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価した値になるようにするステップ、及び
(c)拡張タッカーマン検査を実行して演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成するステップからなる方法。
【請求項７】
前記拡張タッカーマン検査の実行ステップ(c)によって中間演算結果が生成され、前記拡張タッカーマン検査の実行ステップ(c)が、
(c1)拡張タッカーマン検査の中間結果のうちの少なくとも１つの符号をチェックするステップ、及び
(c2)中間結果のうちの少なくとも１つの符号に基づいて、前記拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを含むことを特徴とする、請求項６に記載の方法。
【請求項８】
前記拡張タッカーマン検査の実行ステップ(c)が、
(c3)所定の値を拡張タッカーマン検査の中間結果のうちの１つと比較して比較結果を生成するステップ、及び
(c4)前記比較結果に基づいて前記拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを更に含むことを特徴とする、請求項７に記載の方法。
【請求項９】
前記所定の値が、拡張タッカーマン検査によって計算されるべき剰余項の大きさに関する境界であることを特徴とする、請求項８に記載の方法。
【請求項１０】
前記の終了ステップ(c4)が、中間演算結果が正であり、剰余項の大きさに関する境界より大きい時に早期に発生することを特徴とする、請求項９に記載の方法。
【請求項１１】
前記拡張タッカーマン検査の実行ステップ(c)が、
(c1)所定の値を拡張タッカーマン検査の中間結果のうちの１つと比較して比較結果を生成するステップ、及び
(c2)前記比較結果に基づいて、拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを更に含む、請求項６に記載の方法。
【請求項１２】
前記所定の値が、拡張タッカーマン検査によって計算されるべき剰余項の大きさに関する境界であることを特徴とする、請求項１１に記載の方法。
【請求項１３】
前記終了ステップ(c2)が、中間演算結果が正であり、剰余項の大きさに関する境界より大きい時に早期に発生することを特徴とする、請求項１２に記載の方法。
【請求項１４】
演算結果の近似値の殆どのビットが正確であることを保証できることを特徴とする、請求項６に記載の方法。
【請求項１５】
拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、又は開平算の演算結果の近似値を求めるステップであって、前記演算結果の近似値が、正確に丸め処理された演算結果に必要な桁数を越えた、余分で正確な桁を有するステップ、
(b)可能であれば、余分で正確な桁の値を用いて、演算結果の近似値を正確に丸め処理するステップ、
(c)(b)が行なわれない時、拡張タッカーマン検査を用いて演算結果の近似値を正確に丸め処理するステップ、及び
(d)正確に丸め処理された演算結果を所望の桁数に切り捨てるステップからなる方法。
【請求項１６】
拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、又は開平算の演算結果の近似値を求めるステップ、
(b)演算結果の近似値の、正確であることが保証されていない桁を０にセットするステップ、及び
(c)拡張タッカーマン検査を用いて前記の０にセットされた桁のそれぞれを連続して、かつ個々に正確に丸め処理するステップからなる方法。
【請求項１７】
前記演算結果の近似値が、正確に丸め処理された演算結果と同じ桁数を有することを特徴とする、請求項１６に記載の方法。
【請求項１８】
加算装置、乗算装置、及び制御装置を有する浮動小数点算術演算回路であって、タッカーマン検査を用いて開平算、又は除算の演算結果の近似値が正確に丸め処理されて、正確に丸め処理された演算結果が生成され、前記タッカーマン検査を、早期終了条件をチェックするように修正する浮動小数点算術演算回路。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は浮動小数点算術演算装置を有するデータ処理システムに関し、より詳しくは高精度の丸め処理を行なう方法、及び装置に関する。
【０００２】
【従来の技術】
従来、浮動小数点演算装置は除算、及び開平算を実行するためのハードウエア、又はソフトウエアを用いてきた。このハードウエアを用いたアプローチは、専用の除算回路と開平回路を用いるか、マイクロコードを加算回路、減算回路と共に用いるかのどちらかである。このマイクロコードは反復的手順を実行するよう機能する。このような反復的手順の例としては、引き放し級数拡張機構(nonrestoring series expansion)、及びNewton-Raphsonがある。ソフトウエアによるアプローチではプログラム命令を用いて反復的手順が実行される。
【０００３】
【発明が解決しようとする課題】
どのアプローチを用いるかに関わらず、浮動小数点演算装置はほぼ近似的な結果、即ち最後の数ビットにしか誤差のない結果を得ることができる。従来のアプローチには、こうした浮動小数点演算装置が、精度の高い数（例えば４倍精度の数）に対して除算、又は開平算を行なって正確な結果に最も近い浮動小数点数を得ることを要求される場合、最後の数ビットについて正しい値を得るのに非常に多くの時間をとられるという問題がある。例えば、既存の代表的なワークステーションでは、近似値を約13サイクルで得ることができるが、正確な結果に最も近い値を得るには約134サイクルを要する。
【０００４】
最後の数ビットについて正しい値を得るのに要する非常に多くの時間のために、コンピュータ・メーカーの中には最後の数ビットについて正しい値を求めようとしないものさえある。従来、妥当な時間内に得ることのできた精度は、多くのアプリケーションでは充分とされる、小さな値のULP(ULPは最終桁位置における単位の数値)までの精度であるが、中にはより高い精度を必要とするアプリケーションもある。即ち、アプリケーションによっては演算結果の精度が1/2 ULP以下でなければならないものがある。
【０００５】
問題は既知のアプローチでは最後の数ビットの精度を効率的に決定することができないことである。従来、精度を１ビット上げようとすれば、処理時間もより多くかかっていた。特に、精度を上げるために、追加的な繰り返しが行なわれうるが、最後の数ビットを決定するためのこのような繰り返しは処理時間の観点からは非常に大きな犠牲を伴なうものである。
【０００６】
既知のアプローチの他の問題点としては、単調性を得ることが困難であることである。又、従来の殆どのアプローチでは1/2 ULP以下の精度を有する演算結果を得ることができず、演算結果が変わってくる可能性があるため、本来のライブラリ関数を簡単にアップグレードすることはできない。単調性、又は高い精度（例えば1/2 ULP）が必要とされ、それが浮動小数点算術演算装置で得られない場合、異なる演算結果が生成される可能性があり、それによって、その結果同じ値あるいは予測された値が返されない時、ユーザーに混乱を招く恐れがある。
【０００７】
従って、正しく丸め処理が行われた高精度の演算結果を効率的かつ安定的に生成する、丸め処理技術が未だに必要とされている。
【０００８】
【課題を解決するための手段】
本発明は浮動小数点算術演算装置が商、又は平方根を高精度に計算することを可能にするものであり、商、又は平方根は正確な演算結果に最も近い浮動小数点数に正確に丸め処理される。本発明は、ハードウエアによって提供されるものより高い精度で丸め処理を行うことに広く応用することができる。
【０００９】
丸め処理を行なう前に、浮動小数点算術演算装置内のハードウエアが最後の数桁を除いて正しい高精度の仮数を生成する。次に、本発明の丸め処理技術を用いて正しく丸め処理された演算結果が生成される。本発明は拡張タッカーマン検査を利用して、検査を早期に終了するためのチェックを行ないながら、開平と除算の両方に関して最後の小さな値のULPに関する正しい値を得るものである。早期終了のための検査を行なうことの利点は、丸め処理の判断が必要とされる平均計算時間が大幅に低減されることである。
【００１０】
本発明の浮動小数点算術演算装置の一実施例は、被除数を除数で割って正しく丸め処理された商を得る除算と、ある値から正しく丸め処理された平方根を得る開平算のうちの少なくとも１つを行なう。この算術演算装置は、データを記憶するためのマルチポート記憶装置、２つの数を乗算して積を求め、２つの数を加算して和を求めるための算術手段、除算と開平算のうちの少なくとも１つに関して近似された演算結果を提供する近似手段、拡張タッカーマン検査を用いて除算と開平算のうちの少なくとも１つの近似された演算結果を正しく丸め処理するための手順を含んだ丸め処理マイクロコード、及びこの浮動小数点算術演算装置を制御するための制御装置を有する。丸め処理マイクロコードは、まずこの近似された演算結果が過小評価されるよう保証し、次にタッカーマン検査の中間結果に基づいてタッカーマン検査を早く終了させることを可能にすることによって、近似された演算結果に正確に丸め処理を施し、正確に丸め処理された演算結果を生成する。
【００１１】
本発明は方法としても実施することができる。この方法は拡張タッカーマン検査を用いて除算、又は開平算の演算結果の高精度な近似値を正確に丸め処理するものである。この方法はデータ処理システムにおいて実行され、除算、又は開平算の演算結果の近似値を求めることから始まる。演算結果の近似値のビットの殆どは正しいことが保証される。次に、この方法ではこの演算結果の近似値が実際の結果より過小評価されたものであるよう保証する。その後、拡張タッカーマン検査を実行してこの演算結果の近似値をどのように丸め処理するかを決定することによって、この演算結果の近似値を正確に丸め処理して、正確に丸め処理された演算結果を生成する。拡張タッカーマン検査は、タッカーマン検査の中間結果の符号、及び／又は大きさに基づいて、その検査を早く終了することができる場合、正しく丸め処理された演算結果を従来より速く得ることができるという点で有益である。
【００１２】
添付図面に関連して以下でなされる詳細な説明により、本発明を容易に理解することができる。又ここで参照する図面では、同一の構成要素に対して同一の参照番号が付されている。
【００１３】
【実施例】
本発明は浮動小数点算術演算装置に用いることを意図したものである。本発明を用いることによって、浮動小数点算術演算装置はハードウエアによって得られる精度の少なくとも２倍の精度を有する演算結果を生成することができる。好適には、ハードウエアではNビットの精度の数しか直接演算することができないところを、本発明では2Nビットの近似値を正確に丸め処理することができる。例えば、ハードウエアが２倍精度の演算結果を提供することができる場合、本発明は正確に丸め処理された４倍精度の演算結果を提供できる。
【００１４】
本発明は多倍精度の数にも適用することができる。多倍精度の数は４倍精度より高い精度を有する数である。このような数は単精度浮動小数点配列に記憶することができる。一実施例において、この配列内の最初のワードは整数の値を有する浮動小数点数であり、その絶対値は仮数部にあるワード数を表わす。最初のワードの符号は多倍精度の数の符号である。次のワードは基数に関する指数を表わす整数の値を有する浮動小数点数である。小数点は最初の仮数ワードの後にくる。既知のソフトウエア・ライブラリ・ルーチンを用いてこれらの数に算術演算を実行することができる。例えば、1992年５月にCalifornia州、Moffett Field、NASA Ames Research Center、NAS Applied Research Branchから刊行されたRNR Technical Report RNR-90-022のBailey著“A Portable High Performance Multiprecision Package”を参照されたい。
【００１５】
以下で、本発明の実施例を図１から図８に関連して説明する。しかし、当業者には、本発明がこうした実施例以外にも適用可能であるため、これらの図面を参照してここで行なわれる詳細な説明は例示に過ぎないということが理解されるであろう。
【００１６】
図１は浮動小数点算術演算装置100の第１の実施例を示す。この実施例は４倍精度数を２つの倍精度フォーマットで記憶するものである。この浮動小数点算術演算装置100は乗算と加算用に個別の回路を有する。
【００１７】
マルチポート・レジスタ・ファイル102は読み出しポートA、B、C、及びDと書き込みポートE、及びFを有する。レジスタ・ファイル102はNビットのワード・サイズを有するデータを記憶する。乗算装置104が読み出しポートA、及びBに接続されて、それぞれが被乗数と乗数を受信するようになっている。乗算装置104は桁上げ伝搬加算器（CPA）106に高位部分積と低位部分積を与える。次に、CPA 106によって生成された和が、丸め処理インクリメンタ108によって2Nビットに丸め処理される。丸め処理インクリメンタ108を用いることが好適ではあるが、こうした中間の丸め処理は本発明には必須ではない。
【００１８】
丸め処理された演算結果は２つのNビットの部分からなり、これらの部分はそれぞれ高位部分積ラッチ110と低位部分積ラッチ112に保持される。多重装置114はラッチ110、112からラッチされたNビットの部分を受信する。多重装置114の出力はレジスタ・ファイル102の書き込みポートEに接続され、これによって乗算による２つのNビットの部分を、高位部分積と低位部分積に関する、２つの書き込み動作でレジスタ・ファイル102に記憶することができる。
【００１９】
従って、読み出しポートA、及びBは乗算装置104に被乗数と乗数を提供する。乗算結果は２つのNビット値からなり、これらが丸め処理されて、一時記憶のためにレジスタ・ファイル102の書き込みポートEに送られる。
【００２０】
レジスタ・ファイル102の他のポートは浮動小数点算術演算装置100の加算回路に対応する。位置合わせシフタ116が、レジスタ・ファイル102の読み出しポートC、及びDから加数を受信し、加算を行なえるようにそれらを位置合わせする。次に桁上げ伝搬加算器（CPA）118が、位置合わせされた値を加算して正規化シフタ120に和を供給する。次に、正規化された和が丸め処理インクリメンタ122によって2Nビットに丸め処理されて、丸め処理された和が得られる。この場合も、丸め処理インクリメンタ122は厳密な意味では必須ではない。丸め処理された和の最初のNビットは高位部分ラッチ124にラッチされ、次のNビットは低位部分ラッチ126にラッチされる。多重装置128がラッチ124、126からラッチされた和を入力として受信し、それらを２パスで書き込みポートFに送信する。
【００２１】
制御装置130が実行すべき命令を受信し、図１に示す様々な回路に必要な制御信号132を提供する。従って、制御装置130は乗算、及び加算回路を制御して命令を実行する。
【００２２】
浮動小数点算術演算装置100が、高精度の丸め処理を適当に実行するよう適応させるために、丸め処理マイクロコード134が提供され、制御装置130へのアクセスが可能となっている。この丸め処理マイクロコード134に含まれる手順を次に詳細に説明する。
【００２３】
この丸め処理マイクロコード134は演算結果の近似値をハードウエアによる精度より高い精度で正確に丸め処理するよう動作する。この丸め処理の対象となる演算結果の近似値は、ある程度のビット数まで正確であることが保証できれば、幾通りかの方法で生成されうる。
【００２４】
例えば、丸め処理の対象となる演算結果を生成する方法の１つが“FLOATING POINT ARITHMETIC UNIT USING MODIFIED NEWTON-RAPHSON TECHNIQUE FOR DIVISION AND SQUARE ROOT”と題する米国特許出願08/058,164号に説明されており、この出願は、ここで参照することによって本明細書に組み込まれる。このようなアプローチを用いて、浮動小数点算術演算装置100の制御装置130は除算、及び開平マイクロコード（図示せず）を用いた精度の高い除算、及び開平算命令を実行する。除算、及び開平マイクロコードは会話型手順を使用する。この会話型手順は逆数、又は平方根の逆数(reciprocal square root)の初期推定から始まるため、浮動小数点算術演算回路100は逆数、及び平方根の逆数の初期推定テーブル（図示せず）にもアクセスすることができる。これらの初期推定値は、乗算回路、又は加算回路のどちらかで使用できるようにレジスタ・ファイル102に供給される。
【００２５】
図２は本発明の第２の実施例による浮動小数点算術演算装置200のブロック図である。図２に示す浮動小数点算術演算装置200は乗算加算融合（MAF）設計のものである。即ち、乗算装置と加算器が融合されて乗算と加算が１つの極小単位の動作として発生するものである。
【００２６】
マルチポート・レジスタ・ファイル202は読み出しポートA、B、及びCと、書き込みポートDを含む。乗算装置204は読み出しポートA、及びBから被乗数と乗数を受信して積を生成する。位置合わせシフタ206が読み出しポートCから加数を受け取り、乗算装置204からの信号207を用いて、前記積の指数に従ってこの加数を位置合わせする。
【００２７】
3:2桁上げ保存型加算器208は乗算装置204と位置合わせシフタ206からの入力を受信し、少なくとも2Nビットの出力を桁上げ伝搬加算器（CPA）210に提供する。桁上げ保存型加算器208からの先頭の2Nビットが必要とされる。CPA 210は2Nビットの演算結果を生成し、次にこれが正規化シフタ212によって正規化され、丸め処理インクリメンタ214（これも厳密な意味で必須ではない）によって2Nビットの演算結果に丸め処理される。次に、この丸め処理された演算結果が２つのNビットの部分となって高位部分ラッチ216と低位部分ラッチ218にそれぞれ供給される。多重装置220がラッチ216、218からラッチされたNビットの部分を受信する。多重装置220の出力は、２つのNビットの部分が高位部分と低位部分のための２つの書き込み動作によってレジスタ・ファイル202に記憶されるように、レジスタ・ファイル202の書き込みポートDに接続される。
【００２８】
制御装置222は様々な制御信号224を用いて、浮動小数点算術演算装置200の回路を制御する。制御装置222は特に、丸め処理を実行するために丸め処理マイクロコード226を用いる。丸め処理の対象となる演算結果の近似値は、浮動小数点算術演算装置200によって生成され、丸め処理が行なわれるまでレジスタ・ファイル202内に保持される。
【００２９】
又、制御装置222は算術演算命令を実行する。制御装置222で受け取った命令が除算命令あるいは開平命令である場合、制御装置222は乗算、及び加算回路を用いて除算、及び開平算の実行に必要な反復的手順を実行するために、除算、及び開平マイクロコード（図示せず）にアクセスする。こうして、浮動小数点算術演算装置200は丸め処理の対象となる演算結果の近似値を生成することができる。
【００３０】
性能上の理由から、第１、及び第２の実施例（図１、及び図２）を周知の回路を用いて更に拡張することができる。例えば、パイプラインを導入して追加ラッチを、レジスタ・ファイルと乗算装置あるいは位置合わせシフタの間に設けることができる。又、乗算装置あるいは位置合わせシフタに、より高速に入力を供給できるように、レジスタ・ファイル102と乗算装置104、及び位置合わせシフタの間に多重装置を挿入することもできる。しかし、これらの、及びその他の様々な周知の拡張は、本発明の一部をなすものではなく、むしろハードウエアに関する主要な設計上の選択の問題であり、従ってこれ以上詳細な説明は行わない。
【００３１】
図３は制御装置130、222によって実行あるいは制御される基本的手順のフローチャートである。制御装置130、222が命令を受け取ると、浮動小数点算術演算装置100、200内で様々な演算が行なわれる。まず、命令が復号され（302）、そのオペランドが読み取られる（304）。次に、特殊なケースが存在するかどうかの判断（306）が行なわれる。オペランドが正規数でない場合に、特殊なケースが存在する。そのオペランドが正規数でない場合、演算はIEEE規格754-1985に従って「修正」され（308）、フロー制御はこれらの数が始めから正規数であったかのように続行される。例えば、これらの数の１つが0.02×10-3である場合、この数は処理を続行する前に0.2×10-4に「修正」（この場合は正規化）される。
【００３２】
次に、命令が除算命令であるかどうかに基づいて判断（310）がなされる。その命令が除算命令である場合、制御装置130、222は除算マイクロコードを実行する（312）。その後、本発明によれば、この除算命令の演算結果が丸め処理マイクロコード134、226を用いて正確に丸め処理される(314)。
【００３３】
判断310において、その命令が除算命令ではないと判定されると、この命令が開平命令であるかどうかが判断される（316）。この命令が開平命令である場合、制御装置130、222は開平マイクロコードを実行し（318）、その後丸め処理マイクロコード134、226を用いてこの開平命令の演算結果を正確に丸め処理する（320）。一方、判断316において、この命令が開平命令でないと判定された場合、図１、及び図２に示す乗算装置104、204と加算器118、208によって従来の態様で乗算（322）及び／又は加算（324）が実行される。その後、演算結果が一時的な記憶のためにレジスタ・ファイル102、202に書き戻される（326）。最後に、ブロック314、320、及び326の後で、制御フローはステップ302に戻って次の命令を復号する。
【００３４】
次に、丸め処理マイクロコード134、226によって実行、又は起動される手順を図４、及び図６を参照して詳細に説明する。一般に、丸め処理マイクロコード134、226によって実行、又は起動される手順は、レジスタ内にどの様に数が記憶されているかによって異なる。殆どの機械は数の記憶フォーマットと同じ桁数のレジスタを有する（非拡張フォーマット）が、レジスタに追加のビットを有する（拡張フォーマット）機械もある。非拡張フォーマットであるか拡張フォーマットであるかによって実施態様が異なるため、これらを以下で別個に説明する。
【００３５】
拡張フォーマットの丸め処理
拡張フォーマットを用いてIEEE規格754-1985を実施する機械がある（例えばIntelのx87浮動小数点コプロセッサ）。こうした機械は拡張フォーマットに従って、記憶フォーマットを越える桁数に対応するために更に数ビット多く保持できるレジスタを有する。
【００３６】
この場合、本発明の総合的な目的は、（あらかじめ計算された）浮動小数点数の演算結果を、それが丸め処理をされた時に所望のビット数より多いビットを有する場合に、正確な演算結果になるよう丸め処理をすることである。ここでは、拡張フォーマットを用いる機械に関する丸め処理マイクロコード134、226によって実行、又は起動される手順について説明する。
【００３７】
図４は拡張フォーマットの丸め処理400を実行する時に、丸め処理マイクロコード134、226（及び制御装置130、222）又はその他のソフトウエアによって実行される基本的手順のフローチャートである。後述のＡ:マイクロコードの疑似コード記述では高精度除算、及び開平に関する基本的疑似コードを示す。まず、丸め処理の対象となる演算結果の近似値が得られる（402）。この演算結果の近似値は、浮動小数点算術演算装置によって実行される除算、又は開平算の浮動小数点数の演算結果とすることができる。他のアプローチや設計を用いることも可能であり、図１、及び図２に示す浮動小数点算術演算装置は単なる例に過ぎない。演算結果の近似値を求める方法はここでは重要ではない。演算結果の近似値フォーマットが重要であり、殆ど（全てではない）が正確であることを保証された一定数の仮数ビットから成る。
【００３８】
説明を行うために、ここではハードウエアは２倍精度までを処理可能で、４倍精度の演算結果を得ることのできる、２を基数とする演算を実行するものと仮定する。即ち、ハードウエア（２倍精度）の仮数部はメモリ内では53ビット幅であり、レジスタ内では64ビット幅であるものとする。又、これはレジスタがメモリ・フォーマット以上のビットを記憶するため、いわゆる拡張フォーマットと呼ばれる。この構成では、丸め処理をされていない４倍精度の演算結果はレジスタ内では128ビットである。更に、ハードウエア（恐らく除算、開平算のための除算、開平マイクロコードを有する）は128ビットの結果を生成し、そのうちの最初の125ビットは正確であることが保証されている。この例の場合の目的は、この演算結果を４倍精度の数に関するIEEEフォーマットである、113の仮数ビットに正確に丸め処理することである。
【００３９】
図５はこの例の演算結果の近似値500のフォーマットを示す図である。この演算結果の近似値500は、全部で128ビットを有し、そのうちの最初の125のビット502は正確であることが保証されており、最後の３ビット504は正確であることが保証されていない。この例では、113ビットの結果のみを求めようとするため、ビット114からビット125までの正確なビット506は余分である。
【００４０】
次に、判断404が行なわれる。この判断404はこの利用可能であり、又余分で正確なビットを用いて、丸め処理の判断を行うことが可能かの判断を行なう。判断404が、この余分で正確なビットを用いて丸め処理の判断を行なうことができる場合、余分で正確なビットを用いて演算結果の近似値が正確に丸め処理され（406）、正確に丸め処理された演算結果が生成される。
【００４１】
この余分で正確なビットを利用して、切り捨てられた演算結果の近似値を正確に丸め処理することによって、本発明に最も忠実に従う丸め処理は通常、追加の計算を必要としない。この例の場合の丸め処理手順を表１に示す。
【００４２】
【表１】
0003541086.tif 000002
【００４３】
この例の場合、ビット114からビット125までが、利用可能でかつ余分で正確なビット506である（図５）。統計的に、この例では、2,048の数のうちの１つを除く、この余分で正確なビット504全てを用いて、丸め処理の判断を行なうことができる。この拡張フォーマットを用いることによって、計算を用いずに正確に丸め処理ができない12ビット・パターンが１つだけ（即ち、2,048のうち１つの場合のみ）ある。従って、殆どの場合、この拡張フォーマットによって利用可能になる余分で正確なビットは、丸め処理の判断を行なうのに充分である。
【００４４】
判断404でこの余分で正確なビットを用いて、丸め処理の判断ができないと判定された場合、更に計算が必要となる。まず、余分で保証されていないビット（図５の504）が０にセットされて（408）、過小評価された（又は等しい）演算結果を保証する。この例における過小評価された演算結果508が、０にセットされた保証されていないビット126からビット128を有するものとして図５に示されている。次に、この過小評価された演算結果が、修正タッカーマン検査を用いて正確に丸め処理され(410)、正確に丸め処理された結果が生成される。修正タッカーマン検査は、開平と除算の両方に関して機能し、早期の終了がチェックされることを除けば、従来の開平に対するタッカーマン検査と同様の動作である。その結果、タッカーマン検査が必要な場合でも、正確に丸め処理された演算結果を生成するのに要する計算時間は一般に、従来のタッカーマン検査に比べて大幅に低減される。以下で、修正タッカーマン検査について詳細に説明する。
【００４５】
正確に丸め処理された演算結果（図５の510）がどのように生成されたかに拘わらず、いかなる場合にも、この正確に丸め処理された演算結果が所望のビット数に切り捨てられる（412）。図５に示す例では、丸め処理された結果は113ビットを有することになるので、128ビットの正確に丸め処理された演算結果510は切り捨てられて、最終的に113ビットの演算結果512になる。
【００４６】
タッカーマン検査は平方根の近似値を丸め処理するのに用いることができることは周知である。今日の浮動小数点算術演算装置では、開平命令はべき級数評価、又はNewton-Raphson反復のいずれかを用いたソフトウエアで,通常実施される。どちらが使用されるにしても、最終ビットは適当な丸め処理モード（例えばIEEEには４つの丸め処理モードがある）に正確に丸め処理されなければならない。ここでは、最も近い値への丸め処理モードが仮定されている。開平の場合には、２つの丸め処理に関するアプローチが知られている。１つはNewton-Raphson法を更に反復するアプローチ（除算の場合にも使用可能である）である。もう一つは、平方根の近似値が正確に、最も近い値への丸め処理がなされているか、又は変更されなければならないか（１ULPの切り上げあるいは切り捨てを行なうべきか）を判定するための正確な基準を提供するタッカーマン検査を用いるアプローチである。1990年１月のIBM Journal of Research and Development、Vol. 34、No. 1、111-119ページのMarksteinの“Computation of elementary functions on the IBM RISC System/6000 processor”を参照されたい。この２つの周知のアプローチの問題点は、計算が集中することである。
【００４７】
Newton-Raphsonの追加反復は計算量が大きい。これは、２倍精度の機械上でソフトウエアで実行されなければならない４倍精度数の乗算を必要とするためである。Newton-Raphson技法を簡単にするには、（ｙn+1 + μ113）と（ｙn+1）の剰余を計算する方法がある。ここでμ113は求める数の最後のULP（即ち、ここでは113番目のビット）を表わす。一般に、ｋ回の反復の後、除算の剰余は（Ｂ - Ａｙk）であり、開平の剰余は（Ａ - ｙk2）である。剰余の小さいものが正確な演算結果となる。（ｙn+1 + μ113）の剰余の方が小さければ、大きいほうの数（ｙn+1 + μ113）が正確な演算結果である。（ｙn+1）の剰余の方が小さければ、小さいほうの数（ｙn+1）が正確な演算結果である。このアプローチは、Newton-Raphson反復を完了して結果を生成するのに余分に必要となる乗算と加算を省略することによって計算時間を僅かに短縮させるものである。
【００４８】
タッカーマン検査によれば、ｇをｘ1/2の推定値とすると、ｇ(ｇ - μ)＜ｘ≦ｇ(ｇ + μ)の時（μは１ULP）にのみ、ｇは最も近い値に正確に丸め処理される。この丸め処理の判断は、丸め処理をされているビットの剰余の符号に基づいて行なわれる。このタッカーマン検査の剰余は(ｘ - ｇ2)である。この例では、丸め処理の判断はｙn+1 + μ113/2の剰余の符号に基づいて行なうことができる。この剰余の符号が正である場合、大きい方の数（ｙn+1 + μ113）が所望の演算結果である。この符号が負である場合、小さいほうの数（ｙn+1）が所望の演算結果である。従来のタッカーマン検査（フル・タッカーマン検査と呼ばれる）の問題点は、処理時間の観点から見て計算量が多いということである。特に、ハードウエアによってサポートされる精度より高い精度のフル・タッカーマン検査を行なうことは、追加のNewton-Raphson反復を行なうのと同程度に計算量が多くなる。
【００４９】
本発明は、ハードウエアによってサポートされる精度より高い精度を有する演算結果を丸め処理する場合に、より良い性能が得られるようにフル・タッカーマン検査を改良するものである。基本的には、本発明は中間演算結果を用いて丸め処理の判断を行なう能力を含むようにフル・タッカーマン検査を修正するものである。そこで、この検査は修正（あるいは拡張）タッカーマン検査と呼ばれる。
【００５０】
より詳細には、この修正タッカーマン検査は早期終了条件をチェックする演算を含む。早期終了条件の存在をチェックする場合、修正タッカーマン検査は中間演算結果を所定の境界値と比較する。従って、拡張フォーマット内の利用可能で余分なビットが丸め処理の判断を行なうことができず、更に計算が必要な場合でも、通常フル・タッカーマン検査を避けることができる。まず、中間演算結果が負あるいは０であるとタッカーマン検査が停止されうる。この場合、より小さい値が用いられる。次に、中間演算結果が正であり、かつ全て負である剰余項の大きさに関する境界より大きい時にもタッカーマン検査が停止されうる。この場合、より大きな値が用いられる。
【００５１】
η2より大きい全ての項を蓄積し、η3より大きい全ての項を計算した後、中間演算結果をチェックすることが有益である。ここでηはレジスタ内の数の精度を表わす。この例では、η＝２64である。従って、暗黙の「１」を有する正規化されたIEEE浮動小数点数、２倍精度数を用いる場合、仮数は「１」と「２」の間にある。従って、η2とη3の係数は「10」より小さい。値「10」は計算される必要のある項の数に、その最大値を掛けることによって得られる。計算は、剰余が正であり10η2より小さくなければ第１の項の集合の後に停止させることができ、剰余が正であり10η3より小さくなければ第２の項の集合の後に停止させることができる。
【００５２】
従って、ランダムに剰余が分布する場合には、修正タッカーマン検査は16,384の入力のうちの１回を除いては全て第１の検査の後に終了する。この例では、修正タッカーマン検査は早く終わる場合９つの演算しか実行せず、そのうちの３つはハードウエアで行なうことのできる２倍精度の乗算である。
【００５３】
図８は本発明の修正タッカーマン検査の一実施例のフローチャートである。この修正タッカーマン検査800はタッカーマン検査の中間演算結果を計算する（802）ことによって開始される。次に、この中間演算結果の符号に基づいて判断804が行なわれる。この中間演算結果の符号が負である場合、検査は早く終わり、この丸め処理がされていない演算結果の近似値を切り上げるべきではないことが示される（806）。一方、中間演算結果の符号が正である場合、別の判断808が行なわれる。この中間演算結果がこのタッカーマン検査の最終剰余である場合、判断808によって、タッカーマン検査はこの丸め処理のなされていない演算結果の近似値を切り上げるべきであることを示す（810）。
【００５４】
中間演算結果がタッカーマン検査の最終剰余でない場合、他の判断812が行なわれる。中間演算結果が剰余項の大きさに関する境界より大きい場合、判断812によって早期終了が発生する。この場合、早期終了の結果、タッカーマン検査は丸め処理されていない演算結果の近似値を切り上げるべきことを示す（810）。一方、中間演算結果が剰余項の大きさに関する境界より大きくない場合、タッカーマン検査の最終的な剰余が正であると予想することはできない。従って、判断812の結果、処理はブロック802に戻ってタッカーマン検査の次の中間演算結果の処理が開始される。
【００５５】
後述のＢ:修正タッカーマン検査の実施態様は、拡張あるいは非拡張フォーマットのどちらかを用いて除算、及び開平算を行なうことのできる修正タッカーマン検査の一実施例を示す。後述のＢ:修正タッカーマン検査の実施態様に示すマイクロコード型のプログラミングを図８に示す、より一般的な実施例と関係付けることが有益であるが、必ずしも必要ではない。後述のＢ:修正タッカーマン検査の実施態様にはハードウエアの精度ηをnで示している。後述のＢ:修正タッカーマン検査の実施態様に示す中間演算結果は変数ｇによって容易に識別される。最後の中間演算結果ｇ[27]も又タッカーマン検査の最終剰余である。早期終了の判断804は、例えば行16、及び行27のそれぞれによって実施することができる。完全な実行の終了である判断808が、行38、及び行39によって示されている。他の早期終了の判断812は、例えば行17、及び行28のそれぞれによって実施することができ、ここで10η2と10η3がそれぞれの境界である。「１」が戻ると、丸め処理されていない演算結果の近似値が切り上げられ（即ち、演算結果の近似値のビット内で「１」が検査される）、「０」が戻ると、丸め処理されていない演算結果の近似値は切り上げられない（即ち、演算結果の近似値のビット内で「０」が検査される）。
【００５６】
多倍精度の計算についても、新規な本発明による丸め処理を実施することが容易である。まず、本発明では半分の精度の乗算４つだけが必要であり、残りの演算は加算である。第２に、中間の計算は全て単一の余分なワードを用いて行なうことができる。唯一問題になる状況としては、演算結果において隣の上の位のワードの拡張になるよう正規化された、最も下の位のワードが０から始まりその後が全て１である場合である。幸運なことに、これはランダムに構成されたビットに関しては２64分の１の確率でしか発生しない。従って、タッカーマン検査を行なう必要は殆どない（４倍精度のケースより良好でさえある）。タッカーマン検査が必要な場合でも、通常、上述したような中間演算結果をチェックすると検査は早く終了する。
【００５７】
タッカーマン検査に関する以上の説明は主として開平算の結果を丸め処理する場合についてであったが、タッカーマン検査は除算にも適用できる。従来、タッカーマン検査は開平にのみ適用可能で、除算には適用できなかった。丸め処理のためのタッカーマン検査は近似式(ｙn+1 + μ113/2)2 = ｙn+1(ｙn+1 + μ113)を用いることによって開平用に公式化されている。しかし、除算用にはこうした式はないが、レジスタ内の余分なビットを用いて{Ｂ - Ａ(ｙn+1 + μ113/2)}の符号が検査される。このような適応がなされると、{Ｂ - Ａ(ｙn+1 + μ113/2)}が浮動小数点演算装置のレジスタに適合するため、タッカーマン検査をハードウエア内で実施することが可能になる。
【００５８】
余分で正確なビットを利用することによって、本発明のアプローチは殆どの場合、タッカーマン検査の実施を回避することができる。タッカーマン検査が必要になる稀な場合では、修正タッカーマン検査が用いられる。これは修正タッカーマン検査が実質的に丸め処理の判断を行う速度を大幅に改善するためである。
【００５９】
非拡張フォーマットの丸め処理
本実施例では、正確な平方根、又は商に最も近い浮動小数点数が余分なビットを用いずに計算される。この実施例に関して、４倍精度の数がメモリ、及びレジスタの両方にそれぞれ53の仮数ビットを有する２つの２倍精度の数として記憶されていると仮定する。ここで入力の長さは106ビットであり、最終的に丸め処理される演算結果は106ビットに正確に丸め処理されなければならない。
【００６０】
例えば、上述した（従来の又は修正された）Newton-Raphson法は少なくとも102の正しいビットを有する演算結果の近似値を生成する。４ビットもの誤差がありうるため、標準的なタッカーマン検査を用いた丸め処理を行なうことはできない。Newton-Raphson法を更に２度繰り返せば正確な結果が得られるが、こうした追加の繰り返しは上述したように処理時間の観点から見て問題がある。その代わりに、本発明によれば、タッカーマン検査を用いた丸め処理が、異なるビット位置で６回適用される。
【００６１】
図６は非拡張フォーマットの丸め処理マイクロコード134、226によって実行される演算のフローチャートである。まず、除算命令、又は開平命令の演算結果の近似値が得られる（602）。図４のブロック402と同様、この近似値はNewton-Raphson法に含まれる様々な方法で生成することができる。ここでは、演算結果の近似値は、全てではないが殆どのビットが正確であることが保証される。この例では、106ビットの演算結果の近似値のうち、最初の102ビットは正確であることが保証される。
【００６２】
次に、この演算結果の近似値のうち正確であることが保証されないビットが０にセットされる（604）。その後、判断606が行なわれる。０にセットされた全てのビットが個々に処理されていない場合、このビットの隣にある未処理のビットが、早期終了のためのチェックを行なう修正タッカーマン検査を用いて丸め処理される（608）。この修正タッカーマン検査については上述し、かつ後述のＡ:マイクロコードの疑似コード記述、及びＢ:修正タッカーマン検査の実施態様で詳細に説明する。０にセットされたビットが全て個々に処理された後、ブロック606において、丸め処理が停止される。これは、正確に丸め処理された演算結果がすでに得られたためである。
【００６３】
図７は、この例における非拡張フォーマット丸め処理手順の動作を示す。602で得られる演算結果の近似値は53ビットの仮数を有する２つの２倍精度の数700、702からなる。これら２つの２倍精度数700、702は一緒にされて、正確に丸め処理されるべき演算結果の近似値704を形成する。ここで、最初の102ビット706は正確であることが保証されているため、103番目、104番目、105番目、及び106番目のビット708が０にセットされる（604）。正確な演算結果は過小評価されているため、正確に丸め処理された102ビットの演算結果は102ビットの数、又はこの102ビットの数にそのULPであるμ102を加えた数のどちらかである。次に、初回のタッカーマン検査が適用される。このタッカーマン検査でより大きい数を用いるべきであることが示されると、103番目のビットは１でなければならず、従ってこのビットはμ103を加えることによって１にセットされる。この演算結果は過小評価されたままであるが、103ビットに修正される。同じ手順が103番目、104番目、及び105番目のビットについても繰り返される。その後、タッカーマン検査が最後に106番目のビットに適用されるが、ここで検査によって演算結果が小さ過ぎることが示された場合、μ106が加算される。
【００６４】
この例ではタッカーマン検査は４回繰り返されることに注目されたい。実行速度を上げるために、後述のＢ:修正タッカーマン検査の実施態様に示す修正タッカーマン検査を実施して繰り返すべき演算の数が低減される。即ち、ｖk（検査が行なわれる点）に依存する項だけが再計算される。従って、初回の検査が成功する、最良の性能を有する場合では、最初の検査で９つの演算が実行され、追加の検査１回につき１つの演算が実行されるため、合計の演算数は13になる。最悪の性能を有する場合では、最初の検査に27の演算、追加の検査それぞれに９つの演算が必要であり、演算数は合計で63になる。通常、２回目の検査で最終的な結果が得られ、この場合最初の検査に18の演算、追加の演算にそれぞれ４つの演算が必要であり、演算数の合計は34となる。幸運なことには、繰り返される演算には乗算がない。多倍精度算術演算の場合これは重要である。従来、これと同じ精度を得るためには、正確な106ビットの演算結果を得るのにNewton-Raphson反復を更に２回行なって215ビットを計算する必要があった。タッカーマン検査を繰り返し適用する本発明のアプローチは、従来のアプローチより明らかに高速である。
【００６５】
しかし、開始の演算結果の判定には注意しなければならない。例えば、正確に丸め処理された演算結果が16進ストリング“8000001”になる場合、２ULPだけ過小評価された開始値は7FFFFFFHEXである。上述の手順に従えば、丸め処理された演算結果は8000000HEXである。この状況は、初期評価7FFFFF0HEXプラス10HEXをタッカーマン検査を用いて検査することによって説明することができる。タッカーマン検査によって過小評価であることがわかれば、大きい方の値8000000HEXが初期評価値として用いられ、過小評価でなければ小さい方の値7FFFFF0HEXが用いられる。この追加の検査にはタッカーマン検査を更に一度繰り返すことが必要である。
【００６６】
拡張フォーマットの実施例と同様に、本実施例の場合も、タッカーマン検査を除算に用いることはより難しい。本実施例を拡張フォーマットの実施例のアプローチで行なうと、ｙn+1 + μ106/2が用いられるが、浮動小数点算術演算装置のレジスタには適合しない。その代わり、本実施例のハードウエアは拡張フォーマットをサポートしないため、タッカーマン検査の剰余はＢ - Ａｙn+1 - Ａμ106から計算される。ｙn+1はＢ/Ａに対する非常に近似的な値であるため、最初の２つの項はほぼ打ち消されて正の値が残る。これは正確な商が過小評価されたためである。項Ａμ106はハードウエアによって簡単に計算、及び記憶することができる。これは演算結果が、アンダーフローがなければＡを再び基準化したものであるためである。
【００６７】
一般的考慮事項
以上の説明は、正確な答えに最も近い浮動小数点演算結果を返す「最も近い値への丸め処理」モードについて行なった。IEEE浮動小数点規格、ANSI/IEEE 754-1985には、その他の３つの処理モード、即ち「ゼロへの丸め処理」モード、「正の無限大への丸め処理」モード、及び「負の無限大への丸め処理」モードがある。本発明は「最も近い値への丸め処理」モードに関するものであるが、この浮動小数点演算装置は、オプションで他の丸め処理モードを用いるようにも動作可能である。しかし、そのためには上記の拡張フォーマットの実施例、及び非拡張フォーマットの実施例（除算と開平算にNewton反復を用いるものと仮定する）に以下の変更を行う必要がある。
【００６８】
拡張フォーマットの実施例では、手順の違いは次の通りである。
【００６９】
-ゼロへの丸め処理：単にNewton反復からの出力を返す。
【００７０】
-正の無限大への丸め処理：演算結果が正である場合、Newton反復からの出力に１ULPを加算する。演算結果が負である場合は、単にNewton反復からの出力を返す。
【００７１】
-負の無限大への丸め処理：演算結果が負である場合、Newton反復の出力から１ULPを減算する。演算結果が正である場合は、単にNewton反復からの出力を返す。
【００７２】
非拡張フォーマットの実施例では、手順は（計算値を生成する）最初の５回のタッカーマン丸め処理については同じであり、それ以降は次のように異なる。
【００７３】
-ゼロへの丸め処理：単に計算値を返す。
【００７４】
-正の無限大への丸め処理：演算結果が負である場合、計算値から１ULPを減算する。演算結果が正である場合は、単に計算値を返す。
【００７５】
-負の無限大への丸め処理：演算結果が正である場合、計算値に１ULPを加算する。演算結果が負である場合は、単に計算値を返す。
【００７６】
これらの手順では、開始値が所望の丸め処理された演算結果の過小評価された値であることを前提としているため、これらの代替的手順によって正確な演算結果が常に正しく処理されるわけではない。従って上記の丸め処理を行なう前に１ULP（拡張フォーマットの場合μ128、非拡張フォーマットの場合μ106）を減算することによって、過小評価された値が確実に得られる。
【００７７】
以上の説明は、浮動小数点演算装置が２つの２倍精度数に対する算術演算の４倍精度の演算結果を返す命令を有することを前提としている。即ち、本発明はハードウエアが２つのハードウエア精度数の積の全ての桁、及び和の先頭の４倍（例えば2N）精度部を提供することができることを前提としている。既存のコンピュータの中には、２つの２倍精度数の乗算の４倍精度の結果（即ち全ての桁）を返すハードウエア命令を有するものと、こうした命令を持たないものがある。又、コンピュータによっては２つの数の和の４倍精度部を返す命令を有するものもある（例えばIBM S/370）。
【００７８】
ハードウエアがこれらの条件を満たすことが好適ではあるが、それが不可能である場合、ソフトウエアを併用してその条件を満たすようにすることもできる。２つの２倍精度数の積の４倍精度の演算結果を返すハードウエアを増強するのに用いることのできるコードの例を表２に示す。より詳細には、表２には次のように１つの単精度フォーマットに記憶された２つの２倍精度数の積の全てのビットを返すためのC言語コードを示す。この例では、変数は単精度数として記憶される。
【００７９】
【表２】
0003541086.tif 000003
【００８０】
従って、演算結果は４つの単精度数c[0]、c[1]、c[2]、及びc[3]として返される。このアプローチは、２倍精度フォーマットが２つの単精度数の積より少なくとも２桁大きい桁数を有することを前提としており、これはIEEEの浮動小数点の規格に適合する。
【００８１】
和は指数が実質的に異なる場合、非常に大きな桁数を有することがある。本発明ではこの演算結果の先頭の４倍精度部（例えば2Nビット）を必要とする。従って、ハードウエアがこの先頭の2Nビットを直接検索することができない場合があるため、２つの２倍精度数の和の先頭の４倍精度部を返すのに用いることのできるC言語コードの一例を表３に示す。
【００８２】
【表３】
0003541086.tif 000004
【００８３】
この例では、入力の上位部と下位部は別個の単精度ワードに記憶され、次にこの上位部と下位部が加算され、下位から上位への桁上げが生じる。その和が４つの単精度数c[0]、c[1]、c[2]、及びc[3]として記憶される。
【００８４】
従って、本発明では２つのハードウエア精度数の積の全ての桁、及び和の先頭の2Nビット（例えば４倍）精度部へのアクセスを必要とするが、本発明ではハードウエアの欠点をソフトウエアで補うことができるため、浮動小数点算術演算装置内に（乗算器、及び加減算装置以外の）特殊なハードウエアを必要としない。しかし、こうしたソフトウエアを用いることによって性能は低下する。
【００８５】
本発明の多くの特徴と利点は以上の説明から明らかであろう。従って、特許請求の範囲にはこうした特徴と利点の全てが含まれているものである。更に、当業者には本発明に対して様々な修正や変更を加えることが容易であるため、本発明はここに図示、及び説明した構造や動作に厳密に制限されるものではない。従って、適切な変更、及び同等物の全ては本発明の範囲内に含まれる。
【００８６】
Ａ:マイクロコードの疑似コード記述
ここでは高精度の除算、及び開平算結果を得て、これを正確に丸め処理するために制御ユニット134、226によって実行されるマイクロコードの疑似コード記述を示す。
【００８７】
【表４】
0003541086.tif 000005
【００８８】
関数u(A)、及びd(B,A)はそれぞれ最大で４つのビットに誤差のある平方根、及び商を返す。ルーチンｔはULP ｕに修正タッカーマン検査を実行する。その結果平方根Ｆと商Ｇが得られ、それぞれ演算結果の誤差は1/2 ULP以下である。
【００８９】
【表５】
0003541086.tif 000006
【００９０】
Ｂ:修正タッカーマン検査の実施態様
ここでは除算のための修正タッカーマン検査の実施態様を示す。この実施態様は修正タッカーマン検査をマイクロコードで実施するよう定義するものである。より詳細には、この実施態様は、UNIXデスクトップ計算機ｂｃ用のＣ言語のようなプログラミング言語を用いるものとして記述される。この方法は演算に含まれるビット数を完全に制御できるように整数を用いて実施される。下記の実施態様にはUNIXデスクトップ計算機に用いられる２、３のユーティリティ・ルーチンが組み込まれている。即ち、ルーチンh(a,n)はａに基数ｎのobaseを有する第１の桁を返し、ルーチンl(a,n)はａに基数ｎのobaseを有する第２の桁を返す。ここで、obaseは出力に用いられる基数である。
【００９１】
【表６】
0003541086.tif 000007
【００９２】
Ｂ−２:修正タッカーマン検査-開平（ａ1/2）
開平のための修正タッカーマン検査は上記の除算のための実施態様と同様に実施することができる。唯一の相違点はフォーマットがv(a,y,y,u)となることである。
【００９３】
以下に本発明の実施態様を列挙する。
【００９４】
１．  被除数を除数で除算して、正確に丸め処理された商を生成する除算と、正確に丸め処理された平方根を生成する、ある値の開平算のうち少なくとも１つを実行する浮動小数点算術演算装置であって、前記算術演算装置が、
データを記憶するためのマルチポート記憶装置、
２つの数を乗算して積を求め、２つの数を加算して和を求める算術演算手段、
除算、及び開平算のうちの少なくとも１つについて演算結果の近似値を提供する近似手段、
タッカーマン検査を用いて除算、及び開平算のうちの少なくとも１つの演算結果の近似値を正確に丸め処理するための手順を含む丸め処理マイクロコード、及び
前記浮動小数点算術演算装置を制御する制御装置からなり、
前記丸め処理マイクロコードが、演算結果の近似値が過小評価された値になるようにし、タッカーマン検査を早期終了させることによって、演算結果の近似値を正確に丸め処理して、正確に丸め処理された結果を生成する、浮動小数点算術演算装置。
【００９５】
２．  前記丸め処理マイクロコードが演算結果の近似値を正確に丸め処理する手段を含み、前記丸め処理手段が、
タッカーマン検査を実行して演算結果の近似値をどのように丸め処理するかを判定する手段、
タッカーマン検査の中間結果の符号をチェックする手段、及び
前記中間結果の符号に基づいて、タッカーマン検査の実行終了を早め、演算結果の近似値を正確に丸め処理する手段を含むことを特徴とする、項番１に記載の浮動小数点算術演算装置。
【００９６】
３．  前記丸め処理マイクロコードが、演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価したものになるようにする過小評価手段を更に含むことを特徴とする、項番２に記載の浮動小数点算術演算装置。
【００９７】
４．  前記丸め処理マイクロコードが演算結果の近似値を正確に丸め処理して、正確に丸め処理された演算結果を生成する、丸め処理手段を含み、前記丸め処理手段が、
タッカーマン検査を実行して演算結果の近似値をどのように丸め処理するかを判定する手段、
所定の値をタッカーマン検査の中間結果と比較して比較結果を生成する手段、及び
前記比較結果に基づいてタッカーマン検査の実行終了を早め、演算結果の近似値を正確に丸め処理する手段を含むことを特徴とする、項番１に記載の浮動小数点算術演算装置。
【００９８】
５．  前記丸め処理マイクロコードが、演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価した値になるようにする過小評価手段を更に含むことを特徴とする、項番４に記載の浮動小数点算術演算装置。
【００９９】
６．  拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を、正確に丸め処理して、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、及び開平算の演算結果の近似値を受信するステップ、
(b)演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価した値になるようにするステップ、及び
(c)拡張タッカーマン検査を実行して演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成するステップからなる方法。
【０１００】
７．  前記拡張タッカーマン検査の実行ステップ(c)によって中間演算結果が生成され、前記拡張タッカーマン検査の実行ステップ(c)が、
(c1)拡張タッカーマン検査の中間結果のうちの少なくとも１つの符号をチェックするステップ、及び
(c2)中間結果のうちの少なくとも１つの符号に基づいて、前記拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを含むことを特徴とする、項番６に記載の方法。
【０１０１】
８．  前記拡張タッカーマン検査の実行ステップ(c)が、
(c3)所定の値を拡張タッカーマン検査の中間結果のうちの１つと比較して比較結果を生成するステップ、及び
(c4)前記比較結果に基づいて前記拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを更に含むことを特徴とする、項番７に記載の方法。
【０１０２】
９．  前記所定の値が、拡張タッカーマン検査によって計算されるべき剰余項の大きさに関する境界であることを特徴とする、項番８に記載の方法。
【０１０３】
10．  前記の終了ステップ(c4)が、中間演算結果が正であり、剰余項の大きさに関する境界より大きい時に早期に発生することを特徴とする、項番９に記載の方法。
【０１０４】
11．  前記拡張タッカーマン検査の実行ステップ(c)が、
(c1)所定の値を拡張タッカーマン検査の中間結果のうちの１つと比較して比較結果を生成するステップ、及び
(c2)前記比較結果に基づいて、拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを更に含む、項番６に記載の方法。
【０１０５】
12．  前記所定の値が、拡張タッカーマン検査によって計算されるべき剰余項の大きさに関する境界であることを特徴とする、項番11に記載の方法。
【０１０６】
13．  前記終了ステップ(c2)が、中間演算結果が正であり、剰余項の大きさに関する境界より大きい時に早期に発生することを特徴とする、項番12に記載の方法。
【０１０７】
14．  演算結果の近似値の殆どのビットが正確であることを保証できることを特徴とする、項番６に記載の方法。
【０１０８】
15．  拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、又は開平算の演算結果の近似値を求めるステップであって、前記演算結果の近似値が、正確に丸め処理された演算結果に必要な桁数を越えた、余分で正確な桁を有するステップ、
(b)可能であれば、余分で正確な桁の値を用いて、演算結果の近似値を正確に丸め処理するステップ、
(c)(b)が行なわれない時、拡張タッカーマン検査を用いて演算結果の近似値を正確に丸め処理するステップ、及び
(d)正確に丸め処理された演算結果を所望の桁数に切り捨てるステップからなる方法。
【０１０９】
16．  拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、又は開平算の演算結果の近似値を求めるステップ、
(b)演算結果の近似値の、正確であることが保証されていない桁を０にセットするステップ、及び
(c)拡張タッカーマン検査を用いて前記の０にセットされた桁のそれぞれを連続して、かつ個々に正確に丸め処理するステップからなる方法。
【０１１０】
17．  前記演算結果の近似値が、正確に丸め処理された演算結果と同じ桁数を有することを特徴とする、項番16に記載の方法。
【０１１１】
18．  加算装置、乗算装置、及び制御装置を有する浮動小数点算術演算回路であって、タッカーマン検査を用いて開平算、又は除算の演算結果の近似値が正確に丸め処理されて、正確に丸め処理された演算結果が生成され、前記タッカーマン検査を、早期終了条件をチェックするように修正する浮動小数点算術演算回路。
【０１１２】
【発明の効果】
本発明によって、高精度数の商、又は平方根を正確な結果に最も近い浮動小数点数に、正確に丸め処理を行うための浮動小数点算術演算装置が提供される。
【図面の簡単な説明】
【図１】本発明の第１の実施例に従う、浮動小数点算術演算装置のブロック図である。
【図２】本発明の第２の実施例に従う、浮動小数点算術演算装置のブロック図である。
【図３】制御装置によって実行される基本動作のフローチャートである。
【図４】拡張フォーマットの本発明実施例によって実施される動作のフローチャートである。
【図５】拡張フォーマットの実施例の一例に関する、切り捨て動作の図である。
【図６】非拡張フォーマットの本発明によって実施される動作のフローチャートである。
【図７】非拡張フォーマットの一例に関する、演算結果の近似値を示す図である。
【図８】本発明による修正タッカーマン検査の一実施例のフローチャートである。
【符号の説明】
100、200  浮動小数点算術演算装置
102、202  レジスタ・ファイル
104、204  乗算装置
106、118、210  桁上げ伝搬加算器（CPA）
108、122、214  丸め処理インクリメンタ
110  高位部分積ラッチ
112  低位部分積ラッチ
116、206  位置合わせシフタ
120、212  正規化シフタ
124、216  高位部分ラッチ
126、218  低位部分ラッチ
114、128、220  多重装置
130、222  制御装置
134、226  丸め処理マイクロコード
【図１】
0003541086.tif 000008
【図２】
0003541086.tif 000009
【図３】
0003541086.tif 000010
【図４】
0003541086.tif 000011
【図５】
0003541086.tif 000012
【図６】
0003541086.tif 000013
【図７】
0003541086.tif 000014
【図８】
0003541086.tif 000015