JP3541086B2 - 除算結果、及び開平算結果に正確な丸め処理を行う方法、及び装置 - Google Patents
除算結果、及び開平算結果に正確な丸め処理を行う方法、及び装置 Download PDFInfo
- Publication number
- JP3541086B2 JP3541086B2 JP16516795A JP16516795A JP3541086B2 JP 3541086 B2 JP3541086 B2 JP 3541086B2 JP 16516795 A JP16516795 A JP 16516795A JP 16516795 A JP16516795 A JP 16516795A JP 3541086 B2 JP3541086 B2 JP 3541086B2
- Authority
- JP
- Japan
- Prior art keywords
- tuckerman
- result
- test
- rounding
- operation result
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Description
【0001】
【産業上の利用分野】
本発明は浮動小数点算術演算装置を有するデータ処理システムに関し、より詳しくは高精度の丸め処理を行なう方法、及び装置に関する。
【0002】
【従来の技術】
従来、浮動小数点演算装置は除算、及び開平算を実行するためのハードウエア、又はソフトウエアを用いてきた。このハードウエアを用いたアプローチは、専用の除算回路と開平回路を用いるか、マイクロコードを加算回路、減算回路と共に用いるかのどちらかである。このマイクロコードは反復的手順を実行するよう機能する。このような反復的手順の例としては、引き放し級数拡張機構(nonrestoring series expansion)、及びNewton-Raphsonがある。ソフトウエアによるアプローチではプログラム命令を用いて反復的手順が実行される。
【0003】
【発明が解決しようとする課題】
どのアプローチを用いるかに関わらず、浮動小数点演算装置はほぼ近似的な結果、即ち最後の数ビットにしか誤差のない結果を得ることができる。従来のアプローチには、こうした浮動小数点演算装置が、精度の高い数(例えば4倍精度の数)に対して除算、又は開平算を行なって正確な結果に最も近い浮動小数点数を得ることを要求される場合、最後の数ビットについて正しい値を得るのに非常に多くの時間をとられるという問題がある。例えば、既存の代表的なワークステーションでは、近似値を約13サイクルで得ることができるが、正確な結果に最も近い値を得るには約134サイクルを要する。
【0004】
最後の数ビットについて正しい値を得るのに要する非常に多くの時間のために、コンピュータ・メーカーの中には最後の数ビットについて正しい値を求めようとしないものさえある。従来、妥当な時間内に得ることのできた精度は、多くのアプリケーションでは充分とされる、小さな値のULP(ULPは最終桁位置における単位の数値)までの精度であるが、中にはより高い精度を必要とするアプリケーションもある。即ち、アプリケーションによっては演算結果の精度が1/2 ULP以下でなければならないものがある。
【0005】
問題は既知のアプローチでは最後の数ビットの精度を効率的に決定することができないことである。従来、精度を1ビット上げようとすれば、処理時間もより多くかかっていた。特に、精度を上げるために、追加的な繰り返しが行なわれうるが、最後の数ビットを決定するためのこのような繰り返しは処理時間の観点からは非常に大きな犠牲を伴なうものである。
【0006】
既知のアプローチの他の問題点としては、単調性を得ることが困難であることである。又、従来の殆どのアプローチでは1/2 ULP以下の精度を有する演算結果を得ることができず、演算結果が変わってくる可能性があるため、本来のライブラリ関数を簡単にアップグレードすることはできない。単調性、又は高い精度(例えば1/2 ULP)が必要とされ、それが浮動小数点算術演算装置で得られない場合、異なる演算結果が生成される可能性があり、それによって、その結果同じ値あるいは予測された値が返されない時、ユーザーに混乱を招く恐れがある。
【0007】
従って、正しく丸め処理が行われた高精度の演算結果を効率的かつ安定的に生成する、丸め処理技術が未だに必要とされている。
【0008】
【課題を解決するための手段】
本発明は浮動小数点算術演算装置が商、又は平方根を高精度に計算することを可能にするものであり、商、又は平方根は正確な演算結果に最も近い浮動小数点数に正確に丸め処理される。本発明は、ハードウエアによって提供されるものより高い精度で丸め処理を行うことに広く応用することができる。
【0009】
丸め処理を行なう前に、浮動小数点算術演算装置内のハードウエアが最後の数桁を除いて正しい高精度の仮数を生成する。次に、本発明の丸め処理技術を用いて正しく丸め処理された演算結果が生成される。本発明は拡張タッカーマン検査を利用して、検査を早期に終了するためのチェックを行ないながら、開平と除算の両方に関して最後の小さな値のULPに関する正しい値を得るものである。早期終了のための検査を行なうことの利点は、丸め処理の判断が必要とされる平均計算時間が大幅に低減されることである。
【0010】
本発明の浮動小数点算術演算装置の一実施例は、被除数を除数で割って正しく丸め処理された商を得る除算と、ある値から正しく丸め処理された平方根を得る開平算のうちの少なくとも1つを行なう。この算術演算装置は、データを記憶するためのマルチポート記憶装置、2つの数を乗算して積を求め、2つの数を加算して和を求めるための算術手段、除算と開平算のうちの少なくとも1つに関して近似された演算結果を提供する近似手段、拡張タッカーマン検査を用いて除算と開平算のうちの少なくとも1つの近似された演算結果を正しく丸め処理するための手順を含んだ丸め処理マイクロコード、及びこの浮動小数点算術演算装置を制御するための制御装置を有する。丸め処理マイクロコードは、まずこの近似された演算結果が過小評価されるよう保証し、次にタッカーマン検査の中間結果に基づいてタッカーマン検査を早く終了させることを可能にすることによって、近似された演算結果に正確に丸め処理を施し、正確に丸め処理された演算結果を生成する。
【0011】
本発明は方法としても実施することができる。この方法は拡張タッカーマン検査を用いて除算、又は開平算の演算結果の高精度な近似値を正確に丸め処理するものである。この方法はデータ処理システムにおいて実行され、除算、又は開平算の演算結果の近似値を求めることから始まる。演算結果の近似値のビットの殆どは正しいことが保証される。次に、この方法ではこの演算結果の近似値が実際の結果より過小評価されたものであるよう保証する。その後、拡張タッカーマン検査を実行してこの演算結果の近似値をどのように丸め処理するかを決定することによって、この演算結果の近似値を正確に丸め処理して、正確に丸め処理された演算結果を生成する。拡張タッカーマン検査は、タッカーマン検査の中間結果の符号、及び/又は大きさに基づいて、その検査を早く終了することができる場合、正しく丸め処理された演算結果を従来より速く得ることができるという点で有益である。
【0012】
添付図面に関連して以下でなされる詳細な説明により、本発明を容易に理解することができる。又ここで参照する図面では、同一の構成要素に対して同一の参照番号が付されている。
【0013】
【実施例】
本発明は浮動小数点算術演算装置に用いることを意図したものである。本発明を用いることによって、浮動小数点算術演算装置はハードウエアによって得られる精度の少なくとも2倍の精度を有する演算結果を生成することができる。好適には、ハードウエアではNビットの精度の数しか直接演算することができないところを、本発明では2Nビットの近似値を正確に丸め処理することができる。例えば、ハードウエアが2倍精度の演算結果を提供することができる場合、本発明は正確に丸め処理された4倍精度の演算結果を提供できる。
【0014】
本発明は多倍精度の数にも適用することができる。多倍精度の数は4倍精度より高い精度を有する数である。このような数は単精度浮動小数点配列に記憶することができる。一実施例において、この配列内の最初のワードは整数の値を有する浮動小数点数であり、その絶対値は仮数部にあるワード数を表わす。最初のワードの符号は多倍精度の数の符号である。次のワードは基数に関する指数を表わす整数の値を有する浮動小数点数である。小数点は最初の仮数ワードの後にくる。既知のソフトウエア・ライブラリ・ルーチンを用いてこれらの数に算術演算を実行することができる。例えば、1992年5月にCalifornia州、Moffett Field、NASA Ames Research Center、NAS Applied Research Branchから刊行されたRNR Technical Report RNR-90-022のBailey著“A Portable High Performance Multiprecision Package”を参照されたい。
【0015】
以下で、本発明の実施例を図1から図8に関連して説明する。しかし、当業者には、本発明がこうした実施例以外にも適用可能であるため、これらの図面を参照してここで行なわれる詳細な説明は例示に過ぎないということが理解されるであろう。
【0016】
図1は浮動小数点算術演算装置100の第1の実施例を示す。この実施例は4倍精度数を2つの倍精度フォーマットで記憶するものである。この浮動小数点算術演算装置100は乗算と加算用に個別の回路を有する。
【0017】
マルチポート・レジスタ・ファイル102は読み出しポートA、B、C、及びDと書き込みポートE、及びFを有する。レジスタ・ファイル102はNビットのワード・サイズを有するデータを記憶する。乗算装置104が読み出しポートA、及びBに接続されて、それぞれが被乗数と乗数を受信するようになっている。乗算装置104は桁上げ伝搬加算器(CPA)106に高位部分積と低位部分積を与える。次に、CPA 106によって生成された和が、丸め処理インクリメンタ108によって2Nビットに丸め処理される。丸め処理インクリメンタ108を用いることが好適ではあるが、こうした中間の丸め処理は本発明には必須ではない。
【0018】
丸め処理された演算結果は2つのNビットの部分からなり、これらの部分はそれぞれ高位部分積ラッチ110と低位部分積ラッチ112に保持される。多重装置114はラッチ110、112からラッチされたNビットの部分を受信する。多重装置114の出力はレジスタ・ファイル102の書き込みポートEに接続され、これによって乗算による2つのNビットの部分を、高位部分積と低位部分積に関する、2つの書き込み動作でレジスタ・ファイル102に記憶することができる。
【0019】
従って、読み出しポートA、及びBは乗算装置104に被乗数と乗数を提供する。乗算結果は2つのNビット値からなり、これらが丸め処理されて、一時記憶のためにレジスタ・ファイル102の書き込みポートEに送られる。
【0020】
レジスタ・ファイル102の他のポートは浮動小数点算術演算装置100の加算回路に対応する。位置合わせシフタ116が、レジスタ・ファイル102の読み出しポートC、及びDから加数を受信し、加算を行なえるようにそれらを位置合わせする。次に桁上げ伝搬加算器(CPA)118が、位置合わせされた値を加算して正規化シフタ120に和を供給する。次に、正規化された和が丸め処理インクリメンタ122によって2Nビットに丸め処理されて、丸め処理された和が得られる。この場合も、丸め処理インクリメンタ122は厳密な意味では必須ではない。丸め処理された和の最初のNビットは高位部分ラッチ124にラッチされ、次のNビットは低位部分ラッチ126にラッチされる。多重装置128がラッチ124、126からラッチされた和を入力として受信し、それらを2パスで書き込みポートFに送信する。
【0021】
制御装置130が実行すべき命令を受信し、図1に示す様々な回路に必要な制御信号132を提供する。従って、制御装置130は乗算、及び加算回路を制御して命令を実行する。
【0022】
浮動小数点算術演算装置100が、高精度の丸め処理を適当に実行するよう適応させるために、丸め処理マイクロコード134が提供され、制御装置130へのアクセスが可能となっている。この丸め処理マイクロコード134に含まれる手順を次に詳細に説明する。
【0023】
この丸め処理マイクロコード134は演算結果の近似値をハードウエアによる精度より高い精度で正確に丸め処理するよう動作する。この丸め処理の対象となる演算結果の近似値は、ある程度のビット数まで正確であることが保証できれば、幾通りかの方法で生成されうる。
【0024】
例えば、丸め処理の対象となる演算結果を生成する方法の1つが“FLOATING POINT ARITHMETIC UNIT USING MODIFIED NEWTON-RAPHSON TECHNIQUE FOR DIVISION AND SQUARE ROOT”と題する米国特許出願08/058,164号に説明されており、この出願は、ここで参照することによって本明細書に組み込まれる。このようなアプローチを用いて、浮動小数点算術演算装置100の制御装置130は除算、及び開平マイクロコード(図示せず)を用いた精度の高い除算、及び開平算命令を実行する。除算、及び開平マイクロコードは会話型手順を使用する。この会話型手順は逆数、又は平方根の逆数(reciprocal square root)の初期推定から始まるため、浮動小数点算術演算回路100は逆数、及び平方根の逆数の初期推定テーブル(図示せず)にもアクセスすることができる。これらの初期推定値は、乗算回路、又は加算回路のどちらかで使用できるようにレジスタ・ファイル102に供給される。
【0025】
図2は本発明の第2の実施例による浮動小数点算術演算装置200のブロック図である。図2に示す浮動小数点算術演算装置200は乗算加算融合(MAF)設計のものである。即ち、乗算装置と加算器が融合されて乗算と加算が1つの極小単位の動作として発生するものである。
【0026】
マルチポート・レジスタ・ファイル202は読み出しポートA、B、及びCと、書き込みポートDを含む。乗算装置204は読み出しポートA、及びBから被乗数と乗数を受信して積を生成する。位置合わせシフタ206が読み出しポートCから加数を受け取り、乗算装置204からの信号207を用いて、前記積の指数に従ってこの加数を位置合わせする。
【0027】
3:2桁上げ保存型加算器208は乗算装置204と位置合わせシフタ206からの入力を受信し、少なくとも2Nビットの出力を桁上げ伝搬加算器(CPA)210に提供する。桁上げ保存型加算器208からの先頭の2Nビットが必要とされる。CPA 210は2Nビットの演算結果を生成し、次にこれが正規化シフタ212によって正規化され、丸め処理インクリメンタ214(これも厳密な意味で必須ではない)によって2Nビットの演算結果に丸め処理される。次に、この丸め処理された演算結果が2つのNビットの部分となって高位部分ラッチ216と低位部分ラッチ218にそれぞれ供給される。多重装置220がラッチ216、218からラッチされたNビットの部分を受信する。多重装置220の出力は、2つのNビットの部分が高位部分と低位部分のための2つの書き込み動作によってレジスタ・ファイル202に記憶されるように、レジスタ・ファイル202の書き込みポートDに接続される。
【0028】
制御装置222は様々な制御信号224を用いて、浮動小数点算術演算装置200の回路を制御する。制御装置222は特に、丸め処理を実行するために丸め処理マイクロコード226を用いる。丸め処理の対象となる演算結果の近似値は、浮動小数点算術演算装置200によって生成され、丸め処理が行なわれるまでレジスタ・ファイル202内に保持される。
【0029】
又、制御装置222は算術演算命令を実行する。制御装置222で受け取った命令が除算命令あるいは開平命令である場合、制御装置222は乗算、及び加算回路を用いて除算、及び開平算の実行に必要な反復的手順を実行するために、除算、及び開平マイクロコード(図示せず)にアクセスする。こうして、浮動小数点算術演算装置200は丸め処理の対象となる演算結果の近似値を生成することができる。
【0030】
性能上の理由から、第1、及び第2の実施例(図1、及び図2)を周知の回路を用いて更に拡張することができる。例えば、パイプラインを導入して追加ラッチを、レジスタ・ファイルと乗算装置あるいは位置合わせシフタの間に設けることができる。又、乗算装置あるいは位置合わせシフタに、より高速に入力を供給できるように、レジスタ・ファイル102と乗算装置104、及び位置合わせシフタの間に多重装置を挿入することもできる。しかし、これらの、及びその他の様々な周知の拡張は、本発明の一部をなすものではなく、むしろハードウエアに関する主要な設計上の選択の問題であり、従ってこれ以上詳細な説明は行わない。
【0031】
図3は制御装置130、222によって実行あるいは制御される基本的手順のフローチャートである。制御装置130、222が命令を受け取ると、浮動小数点算術演算装置100、200内で様々な演算が行なわれる。まず、命令が復号され(302)、そのオペランドが読み取られる(304)。次に、特殊なケースが存在するかどうかの判断(306)が行なわれる。オペランドが正規数でない場合に、特殊なケースが存在する。そのオペランドが正規数でない場合、演算はIEEE規格754-1985に従って「修正」され(308)、フロー制御はこれらの数が始めから正規数であったかのように続行される。例えば、これらの数の1つが0.02×10-3である場合、この数は処理を続行する前に0.2×10-4に「修正」(この場合は正規化)される。
【0032】
次に、命令が除算命令であるかどうかに基づいて判断(310)がなされる。その命令が除算命令である場合、制御装置130、222は除算マイクロコードを実行する(312)。その後、本発明によれば、この除算命令の演算結果が丸め処理マイクロコード134、226を用いて正確に丸め処理される(314)。
【0033】
判断310において、その命令が除算命令ではないと判定されると、この命令が開平命令であるかどうかが判断される(316)。この命令が開平命令である場合、制御装置130、222は開平マイクロコードを実行し(318)、その後丸め処理マイクロコード134、226を用いてこの開平命令の演算結果を正確に丸め処理する(320)。一方、判断316において、この命令が開平命令でないと判定された場合、図1、及び図2に示す乗算装置104、204と加算器118、208によって従来の態様で乗算(322)及び/又は加算(324)が実行される。その後、演算結果が一時的な記憶のためにレジスタ・ファイル102、202に書き戻される(326)。最後に、ブロック314、320、及び326の後で、制御フローはステップ302に戻って次の命令を復号する。
【0034】
次に、丸め処理マイクロコード134、226によって実行、又は起動される手順を図4、及び図6を参照して詳細に説明する。一般に、丸め処理マイクロコード134、226によって実行、又は起動される手順は、レジスタ内にどの様に数が記憶されているかによって異なる。殆どの機械は数の記憶フォーマットと同じ桁数のレジスタを有する(非拡張フォーマット)が、レジスタに追加のビットを有する(拡張フォーマット)機械もある。非拡張フォーマットであるか拡張フォーマットであるかによって実施態様が異なるため、これらを以下で別個に説明する。
【0035】
拡張フォーマットの丸め処理
拡張フォーマットを用いてIEEE規格754-1985を実施する機械がある(例えばIntelのx87浮動小数点コプロセッサ)。こうした機械は拡張フォーマットに従って、記憶フォーマットを越える桁数に対応するために更に数ビット多く保持できるレジスタを有する。
【0036】
この場合、本発明の総合的な目的は、(あらかじめ計算された)浮動小数点数の演算結果を、それが丸め処理をされた時に所望のビット数より多いビットを有する場合に、正確な演算結果になるよう丸め処理をすることである。ここでは、拡張フォーマットを用いる機械に関する丸め処理マイクロコード134、226によって実行、又は起動される手順について説明する。
【0037】
図4は拡張フォーマットの丸め処理400を実行する時に、丸め処理マイクロコード134、226(及び制御装置130、222)又はその他のソフトウエアによって実行される基本的手順のフローチャートである。後述のA:マイクロコードの疑似コード記述では高精度除算、及び開平に関する基本的疑似コードを示す。まず、丸め処理の対象となる演算結果の近似値が得られる(402)。この演算結果の近似値は、浮動小数点算術演算装置によって実行される除算、又は開平算の浮動小数点数の演算結果とすることができる。他のアプローチや設計を用いることも可能であり、図1、及び図2に示す浮動小数点算術演算装置は単なる例に過ぎない。演算結果の近似値を求める方法はここでは重要ではない。演算結果の近似値フォーマットが重要であり、殆ど(全てではない)が正確であることを保証された一定数の仮数ビットから成る。
【0038】
説明を行うために、ここではハードウエアは2倍精度までを処理可能で、4倍精度の演算結果を得ることのできる、2を基数とする演算を実行するものと仮定する。即ち、ハードウエア(2倍精度)の仮数部はメモリ内では53ビット幅であり、レジスタ内では64ビット幅であるものとする。又、これはレジスタがメモリ・フォーマット以上のビットを記憶するため、いわゆる拡張フォーマットと呼ばれる。この構成では、丸め処理をされていない4倍精度の演算結果はレジスタ内では128ビットである。更に、ハードウエア(恐らく除算、開平算のための除算、開平マイクロコードを有する)は128ビットの結果を生成し、そのうちの最初の125ビットは正確であることが保証されている。この例の場合の目的は、この演算結果を4倍精度の数に関するIEEEフォーマットである、113の仮数ビットに正確に丸め処理することである。
【0039】
図5はこの例の演算結果の近似値500のフォーマットを示す図である。この演算結果の近似値500は、全部で128ビットを有し、そのうちの最初の125のビット502は正確であることが保証されており、最後の3ビット504は正確であることが保証されていない。この例では、113ビットの結果のみを求めようとするため、ビット114からビット125までの正確なビット506は余分である。
【0040】
次に、判断404が行なわれる。この判断404はこの利用可能であり、又余分で正確なビットを用いて、丸め処理の判断を行うことが可能かの判断を行なう。判断404が、この余分で正確なビットを用いて丸め処理の判断を行なうことができる場合、余分で正確なビットを用いて演算結果の近似値が正確に丸め処理され(406)、正確に丸め処理された演算結果が生成される。
【0041】
この余分で正確なビットを利用して、切り捨てられた演算結果の近似値を正確に丸め処理することによって、本発明に最も忠実に従う丸め処理は通常、追加の計算を必要としない。この例の場合の丸め処理手順を表1に示す。
【0042】
【表1】
【0043】
この例の場合、ビット114からビット125までが、利用可能でかつ余分で正確なビット506である(図5)。統計的に、この例では、2,048の数のうちの1つを除く、この余分で正確なビット504全てを用いて、丸め処理の判断を行なうことができる。この拡張フォーマットを用いることによって、計算を用いずに正確に丸め処理ができない12ビット・パターンが1つだけ(即ち、2,048のうち1つの場合のみ)ある。従って、殆どの場合、この拡張フォーマットによって利用可能になる余分で正確なビットは、丸め処理の判断を行なうのに充分である。
【0044】
判断404でこの余分で正確なビットを用いて、丸め処理の判断ができないと判定された場合、更に計算が必要となる。まず、余分で保証されていないビット(図5の504)が0にセットされて(408)、過小評価された(又は等しい)演算結果を保証する。この例における過小評価された演算結果508が、0にセットされた保証されていないビット126からビット128を有するものとして図5に示されている。次に、この過小評価された演算結果が、修正タッカーマン検査を用いて正確に丸め処理され(410)、正確に丸め処理された結果が生成される。修正タッカーマン検査は、開平と除算の両方に関して機能し、早期の終了がチェックされることを除けば、従来の開平に対するタッカーマン検査と同様の動作である。その結果、タッカーマン検査が必要な場合でも、正確に丸め処理された演算結果を生成するのに要する計算時間は一般に、従来のタッカーマン検査に比べて大幅に低減される。以下で、修正タッカーマン検査について詳細に説明する。
【0045】
正確に丸め処理された演算結果(図5の510)がどのように生成されたかに拘わらず、いかなる場合にも、この正確に丸め処理された演算結果が所望のビット数に切り捨てられる(412)。図5に示す例では、丸め処理された結果は113ビットを有することになるので、128ビットの正確に丸め処理された演算結果510は切り捨てられて、最終的に113ビットの演算結果512になる。
【0046】
タッカーマン検査は平方根の近似値を丸め処理するのに用いることができることは周知である。今日の浮動小数点算術演算装置では、開平命令はべき級数評価、又はNewton-Raphson反復のいずれかを用いたソフトウエアで,通常実施される。どちらが使用されるにしても、最終ビットは適当な丸め処理モード(例えばIEEEには4つの丸め処理モードがある)に正確に丸め処理されなければならない。ここでは、最も近い値への丸め処理モードが仮定されている。開平の場合には、2つの丸め処理に関するアプローチが知られている。1つはNewton-Raphson法を更に反復するアプローチ(除算の場合にも使用可能である)である。もう一つは、平方根の近似値が正確に、最も近い値への丸め処理がなされているか、又は変更されなければならないか(1ULPの切り上げあるいは切り捨てを行なうべきか)を判定するための正確な基準を提供するタッカーマン検査を用いるアプローチである。1990年1月のIBM Journal of Research and Development、Vol. 34、No. 1、111-119ページのMarksteinの“Computation of elementary functions on the IBM RISC System/6000 processor”を参照されたい。この2つの周知のアプローチの問題点は、計算が集中することである。
【0047】
Newton-Raphsonの追加反復は計算量が大きい。これは、2倍精度の機械上でソフトウエアで実行されなければならない4倍精度数の乗算を必要とするためである。Newton-Raphson技法を簡単にするには、(yn+1 + μ113)と(yn+1)の剰余を計算する方法がある。ここでμ113は求める数の最後のULP(即ち、ここでは113番目のビット)を表わす。一般に、k回の反復の後、除算の剰余は(B - Ayk)であり、開平の剰余は(A - yk 2)である。剰余の小さいものが正確な演算結果となる。(yn+1 + μ113)の剰余の方が小さければ、大きいほうの数(yn+1 + μ113)が正確な演算結果である。(yn+1)の剰余の方が小さければ、小さいほうの数(yn+1)が正確な演算結果である。このアプローチは、Newton-Raphson反復を完了して結果を生成するのに余分に必要となる乗算と加算を省略することによって計算時間を僅かに短縮させるものである。
【0048】
タッカーマン検査によれば、gをx1/2の推定値とすると、g(g - μ)<x≦g(g + μ)の時(μは1ULP)にのみ、gは最も近い値に正確に丸め処理される。この丸め処理の判断は、丸め処理をされているビットの剰余の符号に基づいて行なわれる。このタッカーマン検査の剰余は(x - g2)である。この例では、丸め処理の判断はyn+1 + μ113/2の剰余の符号に基づいて行なうことができる。この剰余の符号が正である場合、大きい方の数(yn+1 + μ113)が所望の演算結果である。この符号が負である場合、小さいほうの数(yn+1)が所望の演算結果である。従来のタッカーマン検査(フル・タッカーマン検査と呼ばれる)の問題点は、処理時間の観点から見て計算量が多いということである。特に、ハードウエアによってサポートされる精度より高い精度のフル・タッカーマン検査を行なうことは、追加のNewton-Raphson反復を行なうのと同程度に計算量が多くなる。
【0049】
本発明は、ハードウエアによってサポートされる精度より高い精度を有する演算結果を丸め処理する場合に、より良い性能が得られるようにフル・タッカーマン検査を改良するものである。基本的には、本発明は中間演算結果を用いて丸め処理の判断を行なう能力を含むようにフル・タッカーマン検査を修正するものである。そこで、この検査は修正(あるいは拡張)タッカーマン検査と呼ばれる。
【0050】
より詳細には、この修正タッカーマン検査は早期終了条件をチェックする演算を含む。早期終了条件の存在をチェックする場合、修正タッカーマン検査は中間演算結果を所定の境界値と比較する。従って、拡張フォーマット内の利用可能で余分なビットが丸め処理の判断を行なうことができず、更に計算が必要な場合でも、通常フル・タッカーマン検査を避けることができる。まず、中間演算結果が負あるいは0であるとタッカーマン検査が停止されうる。この場合、より小さい値が用いられる。次に、中間演算結果が正であり、かつ全て負である剰余項の大きさに関する境界より大きい時にもタッカーマン検査が停止されうる。この場合、より大きな値が用いられる。
【0051】
η2より大きい全ての項を蓄積し、η3より大きい全ての項を計算した後、中間演算結果をチェックすることが有益である。ここでηはレジスタ内の数の精度を表わす。この例では、η=264である。従って、暗黙の「1」を有する正規化されたIEEE浮動小数点数、2倍精度数を用いる場合、仮数は「1」と「2」の間にある。従って、η2とη3の係数は「10」より小さい。値「10」は計算される必要のある項の数に、その最大値を掛けることによって得られる。計算は、剰余が正であり10η2より小さくなければ第1の項の集合の後に停止させることができ、剰余が正であり10η3より小さくなければ第2の項の集合の後に停止させることができる。
【0052】
従って、ランダムに剰余が分布する場合には、修正タッカーマン検査は16,384の入力のうちの1回を除いては全て第1の検査の後に終了する。この例では、修正タッカーマン検査は早く終わる場合9つの演算しか実行せず、そのうちの3つはハードウエアで行なうことのできる2倍精度の乗算である。
【0053】
図8は本発明の修正タッカーマン検査の一実施例のフローチャートである。この修正タッカーマン検査800はタッカーマン検査の中間演算結果を計算する(802)ことによって開始される。次に、この中間演算結果の符号に基づいて判断804が行なわれる。この中間演算結果の符号が負である場合、検査は早く終わり、この丸め処理がされていない演算結果の近似値を切り上げるべきではないことが示される(806)。一方、中間演算結果の符号が正である場合、別の判断808が行なわれる。この中間演算結果がこのタッカーマン検査の最終剰余である場合、判断808によって、タッカーマン検査はこの丸め処理のなされていない演算結果の近似値を切り上げるべきであることを示す(810)。
【0054】
中間演算結果がタッカーマン検査の最終剰余でない場合、他の判断812が行なわれる。中間演算結果が剰余項の大きさに関する境界より大きい場合、判断812によって早期終了が発生する。この場合、早期終了の結果、タッカーマン検査は丸め処理されていない演算結果の近似値を切り上げるべきことを示す(810)。一方、中間演算結果が剰余項の大きさに関する境界より大きくない場合、タッカーマン検査の最終的な剰余が正であると予想することはできない。従って、判断812の結果、処理はブロック802に戻ってタッカーマン検査の次の中間演算結果の処理が開始される。
【0055】
後述のB:修正タッカーマン検査の実施態様は、拡張あるいは非拡張フォーマットのどちらかを用いて除算、及び開平算を行なうことのできる修正タッカーマン検査の一実施例を示す。後述のB:修正タッカーマン検査の実施態様に示すマイクロコード型のプログラミングを図8に示す、より一般的な実施例と関係付けることが有益であるが、必ずしも必要ではない。後述のB:修正タッカーマン検査の実施態様にはハードウエアの精度ηをnで示している。後述のB:修正タッカーマン検査の実施態様に示す中間演算結果は変数gによって容易に識別される。最後の中間演算結果g[27]も又タッカーマン検査の最終剰余である。早期終了の判断804は、例えば行16、及び行27のそれぞれによって実施することができる。完全な実行の終了である判断808が、行38、及び行39によって示されている。他の早期終了の判断812は、例えば行17、及び行28のそれぞれによって実施することができ、ここで10η2と10η3がそれぞれの境界である。「1」が戻ると、丸め処理されていない演算結果の近似値が切り上げられ(即ち、演算結果の近似値のビット内で「1」が検査される)、「0」が戻ると、丸め処理されていない演算結果の近似値は切り上げられない(即ち、演算結果の近似値のビット内で「0」が検査される)。
【0056】
多倍精度の計算についても、新規な本発明による丸め処理を実施することが容易である。まず、本発明では半分の精度の乗算4つだけが必要であり、残りの演算は加算である。第2に、中間の計算は全て単一の余分なワードを用いて行なうことができる。唯一問題になる状況としては、演算結果において隣の上の位のワードの拡張になるよう正規化された、最も下の位のワードが0から始まりその後が全て1である場合である。幸運なことに、これはランダムに構成されたビットに関しては264分の1の確率でしか発生しない。従って、タッカーマン検査を行なう必要は殆どない(4倍精度のケースより良好でさえある)。タッカーマン検査が必要な場合でも、通常、上述したような中間演算結果をチェックすると検査は早く終了する。
【0057】
タッカーマン検査に関する以上の説明は主として開平算の結果を丸め処理する場合についてであったが、タッカーマン検査は除算にも適用できる。従来、タッカーマン検査は開平にのみ適用可能で、除算には適用できなかった。丸め処理のためのタッカーマン検査は近似式(yn+1 + μ113/2)2 = yn+1(yn+1 + μ113)を用いることによって開平用に公式化されている。しかし、除算用にはこうした式はないが、レジスタ内の余分なビットを用いて{B - A(yn+1 + μ113/2)}の符号が検査される。このような適応がなされると、{B - A(yn+1 + μ113/2)}が浮動小数点演算装置のレジスタに適合するため、タッカーマン検査をハードウエア内で実施することが可能になる。
【0058】
余分で正確なビットを利用することによって、本発明のアプローチは殆どの場合、タッカーマン検査の実施を回避することができる。タッカーマン検査が必要になる稀な場合では、修正タッカーマン検査が用いられる。これは修正タッカーマン検査が実質的に丸め処理の判断を行う速度を大幅に改善するためである。
【0059】
非拡張フォーマットの丸め処理
本実施例では、正確な平方根、又は商に最も近い浮動小数点数が余分なビットを用いずに計算される。この実施例に関して、4倍精度の数がメモリ、及びレジスタの両方にそれぞれ53の仮数ビットを有する2つの2倍精度の数として記憶されていると仮定する。ここで入力の長さは106ビットであり、最終的に丸め処理される演算結果は106ビットに正確に丸め処理されなければならない。
【0060】
例えば、上述した(従来の又は修正された)Newton-Raphson法は少なくとも102の正しいビットを有する演算結果の近似値を生成する。4ビットもの誤差がありうるため、標準的なタッカーマン検査を用いた丸め処理を行なうことはできない。Newton-Raphson法を更に2度繰り返せば正確な結果が得られるが、こうした追加の繰り返しは上述したように処理時間の観点から見て問題がある。その代わりに、本発明によれば、タッカーマン検査を用いた丸め処理が、異なるビット位置で6回適用される。
【0061】
図6は非拡張フォーマットの丸め処理マイクロコード134、226によって実行される演算のフローチャートである。まず、除算命令、又は開平命令の演算結果の近似値が得られる(602)。図4のブロック402と同様、この近似値はNewton-Raphson法に含まれる様々な方法で生成することができる。ここでは、演算結果の近似値は、全てではないが殆どのビットが正確であることが保証される。この例では、106ビットの演算結果の近似値のうち、最初の102ビットは正確であることが保証される。
【0062】
次に、この演算結果の近似値のうち正確であることが保証されないビットが0にセットされる(604)。その後、判断606が行なわれる。0にセットされた全てのビットが個々に処理されていない場合、このビットの隣にある未処理のビットが、早期終了のためのチェックを行なう修正タッカーマン検査を用いて丸め処理される(608)。この修正タッカーマン検査については上述し、かつ後述のA:マイクロコードの疑似コード記述、及びB:修正タッカーマン検査の実施態様で詳細に説明する。0にセットされたビットが全て個々に処理された後、ブロック606において、丸め処理が停止される。これは、正確に丸め処理された演算結果がすでに得られたためである。
【0063】
図7は、この例における非拡張フォーマット丸め処理手順の動作を示す。602で得られる演算結果の近似値は53ビットの仮数を有する2つの2倍精度の数700、702からなる。これら2つの2倍精度数700、702は一緒にされて、正確に丸め処理されるべき演算結果の近似値704を形成する。ここで、最初の102ビット706は正確であることが保証されているため、103番目、104番目、105番目、及び106番目のビット708が0にセットされる(604)。正確な演算結果は過小評価されているため、正確に丸め処理された102ビットの演算結果は102ビットの数、又はこの102ビットの数にそのULPであるμ102を加えた数のどちらかである。次に、初回のタッカーマン検査が適用される。このタッカーマン検査でより大きい数を用いるべきであることが示されると、103番目のビットは1でなければならず、従ってこのビットはμ103を加えることによって1にセットされる。この演算結果は過小評価されたままであるが、103ビットに修正される。同じ手順が103番目、104番目、及び105番目のビットについても繰り返される。その後、タッカーマン検査が最後に106番目のビットに適用されるが、ここで検査によって演算結果が小さ過ぎることが示された場合、μ106が加算される。
【0064】
この例ではタッカーマン検査は4回繰り返されることに注目されたい。実行速度を上げるために、後述のB:修正タッカーマン検査の実施態様に示す修正タッカーマン検査を実施して繰り返すべき演算の数が低減される。即ち、vk(検査が行なわれる点)に依存する項だけが再計算される。従って、初回の検査が成功する、最良の性能を有する場合では、最初の検査で9つの演算が実行され、追加の検査1回につき1つの演算が実行されるため、合計の演算数は13になる。最悪の性能を有する場合では、最初の検査に27の演算、追加の検査それぞれに9つの演算が必要であり、演算数は合計で63になる。通常、2回目の検査で最終的な結果が得られ、この場合最初の検査に18の演算、追加の演算にそれぞれ4つの演算が必要であり、演算数の合計は34となる。幸運なことには、繰り返される演算には乗算がない。多倍精度算術演算の場合これは重要である。従来、これと同じ精度を得るためには、正確な106ビットの演算結果を得るのにNewton-Raphson反復を更に2回行なって215ビットを計算する必要があった。タッカーマン検査を繰り返し適用する本発明のアプローチは、従来のアプローチより明らかに高速である。
【0065】
しかし、開始の演算結果の判定には注意しなければならない。例えば、正確に丸め処理された演算結果が16進ストリング“8000001”になる場合、2ULPだけ過小評価された開始値は7FFFFFFHEXである。上述の手順に従えば、丸め処理された演算結果は8000000HEXである。この状況は、初期評価7FFFFF0HEXプラス10HEXをタッカーマン検査を用いて検査することによって説明することができる。タッカーマン検査によって過小評価であることがわかれば、大きい方の値8000000HEXが初期評価値として用いられ、過小評価でなければ小さい方の値7FFFFF0HEXが用いられる。この追加の検査にはタッカーマン検査を更に一度繰り返すことが必要である。
【0066】
拡張フォーマットの実施例と同様に、本実施例の場合も、タッカーマン検査を除算に用いることはより難しい。本実施例を拡張フォーマットの実施例のアプローチで行なうと、yn+1 + μ106/2が用いられるが、浮動小数点算術演算装置のレジスタには適合しない。その代わり、本実施例のハードウエアは拡張フォーマットをサポートしないため、タッカーマン検査の剰余はB - Ayn+1 - Aμ106から計算される。yn+1はB/Aに対する非常に近似的な値であるため、最初の2つの項はほぼ打ち消されて正の値が残る。これは正確な商が過小評価されたためである。項Aμ106はハードウエアによって簡単に計算、及び記憶することができる。これは演算結果が、アンダーフローがなければAを再び基準化したものであるためである。
【0067】
一般的考慮事項
以上の説明は、正確な答えに最も近い浮動小数点演算結果を返す「最も近い値への丸め処理」モードについて行なった。IEEE浮動小数点規格、ANSI/IEEE 754-1985には、その他の3つの処理モード、即ち「ゼロへの丸め処理」モード、「正の無限大への丸め処理」モード、及び「負の無限大への丸め処理」モードがある。本発明は「最も近い値への丸め処理」モードに関するものであるが、この浮動小数点演算装置は、オプションで他の丸め処理モードを用いるようにも動作可能である。しかし、そのためには上記の拡張フォーマットの実施例、及び非拡張フォーマットの実施例(除算と開平算にNewton反復を用いるものと仮定する)に以下の変更を行う必要がある。
【0068】
拡張フォーマットの実施例では、手順の違いは次の通りである。
【0069】
-ゼロへの丸め処理:単にNewton反復からの出力を返す。
【0070】
-正の無限大への丸め処理:演算結果が正である場合、Newton反復からの出力に1ULPを加算する。演算結果が負である場合は、単にNewton反復からの出力を返す。
【0071】
-負の無限大への丸め処理:演算結果が負である場合、Newton反復の出力から1ULPを減算する。演算結果が正である場合は、単にNewton反復からの出力を返す。
【0072】
非拡張フォーマットの実施例では、手順は(計算値を生成する)最初の5回のタッカーマン丸め処理については同じであり、それ以降は次のように異なる。
【0073】
-ゼロへの丸め処理:単に計算値を返す。
【0074】
-正の無限大への丸め処理:演算結果が負である場合、計算値から1ULPを減算する。演算結果が正である場合は、単に計算値を返す。
【0075】
-負の無限大への丸め処理:演算結果が正である場合、計算値に1ULPを加算する。演算結果が負である場合は、単に計算値を返す。
【0076】
これらの手順では、開始値が所望の丸め処理された演算結果の過小評価された値であることを前提としているため、これらの代替的手順によって正確な演算結果が常に正しく処理されるわけではない。従って上記の丸め処理を行なう前に1ULP(拡張フォーマットの場合μ128、非拡張フォーマットの場合μ106)を減算することによって、過小評価された値が確実に得られる。
【0077】
以上の説明は、浮動小数点演算装置が2つの2倍精度数に対する算術演算の4倍精度の演算結果を返す命令を有することを前提としている。即ち、本発明はハードウエアが2つのハードウエア精度数の積の全ての桁、及び和の先頭の4倍(例えば2N)精度部を提供することができることを前提としている。既存のコンピュータの中には、2つの2倍精度数の乗算の4倍精度の結果(即ち全ての桁)を返すハードウエア命令を有するものと、こうした命令を持たないものがある。又、コンピュータによっては2つの数の和の4倍精度部を返す命令を有するものもある(例えばIBM S/370)。
【0078】
ハードウエアがこれらの条件を満たすことが好適ではあるが、それが不可能である場合、ソフトウエアを併用してその条件を満たすようにすることもできる。2つの2倍精度数の積の4倍精度の演算結果を返すハードウエアを増強するのに用いることのできるコードの例を表2に示す。より詳細には、表2には次のように1つの単精度フォーマットに記憶された2つの2倍精度数の積の全てのビットを返すためのC言語コードを示す。この例では、変数は単精度数として記憶される。
【0079】
【表2】
【0080】
従って、演算結果は4つの単精度数c[0]、c[1]、c[2]、及びc[3]として返される。このアプローチは、2倍精度フォーマットが2つの単精度数の積より少なくとも2桁大きい桁数を有することを前提としており、これはIEEEの浮動小数点の規格に適合する。
【0081】
和は指数が実質的に異なる場合、非常に大きな桁数を有することがある。本発明ではこの演算結果の先頭の4倍精度部(例えば2Nビット)を必要とする。従って、ハードウエアがこの先頭の2Nビットを直接検索することができない場合があるため、2つの2倍精度数の和の先頭の4倍精度部を返すのに用いることのできるC言語コードの一例を表3に示す。
【0082】
【表3】
【0083】
この例では、入力の上位部と下位部は別個の単精度ワードに記憶され、次にこの上位部と下位部が加算され、下位から上位への桁上げが生じる。その和が4つの単精度数c[0]、c[1]、c[2]、及びc[3]として記憶される。
【0084】
従って、本発明では2つのハードウエア精度数の積の全ての桁、及び和の先頭の2Nビット(例えば4倍)精度部へのアクセスを必要とするが、本発明ではハードウエアの欠点をソフトウエアで補うことができるため、浮動小数点算術演算装置内に(乗算器、及び加減算装置以外の)特殊なハードウエアを必要としない。しかし、こうしたソフトウエアを用いることによって性能は低下する。
【0085】
本発明の多くの特徴と利点は以上の説明から明らかであろう。従って、特許請求の範囲にはこうした特徴と利点の全てが含まれているものである。更に、当業者には本発明に対して様々な修正や変更を加えることが容易であるため、本発明はここに図示、及び説明した構造や動作に厳密に制限されるものではない。従って、適切な変更、及び同等物の全ては本発明の範囲内に含まれる。
【0086】
A : マイクロコードの疑似コード記述
ここでは高精度の除算、及び開平算結果を得て、これを正確に丸め処理するために制御ユニット134、226によって実行されるマイクロコードの疑似コード記述を示す。
【0087】
【表4】
【0088】
関数u(A)、及びd(B,A)はそれぞれ最大で4つのビットに誤差のある平方根、及び商を返す。ルーチンtはULP uに修正タッカーマン検査を実行する。その結果平方根Fと商Gが得られ、それぞれ演算結果の誤差は1/2 ULP以下である。
【0089】
【表5】
【0090】
B : 修正タッカーマン検査の実施態様
ここでは除算のための修正タッカーマン検査の実施態様を示す。この実施態様は修正タッカーマン検査をマイクロコードで実施するよう定義するものである。より詳細には、この実施態様は、UNIXデスクトップ計算機bc用のC言語のようなプログラミング言語を用いるものとして記述される。この方法は演算に含まれるビット数を完全に制御できるように整数を用いて実施される。下記の実施態様にはUNIXデスクトップ計算機に用いられる2、3のユーティリティ・ルーチンが組み込まれている。即ち、ルーチンh(a,n)はaに基数nのobaseを有する第1の桁を返し、ルーチンl(a,n)はaに基数nのobaseを有する第2の桁を返す。ここで、obaseは出力に用いられる基数である。
【0091】
【表6】
【0092】
B−2 : 修正タッカーマン検査 - 開平(a 1/2 )
開平のための修正タッカーマン検査は上記の除算のための実施態様と同様に実施することができる。唯一の相違点はフォーマットがv(a,y,y,u)となることである。
【0093】
以下に本発明の実施態様を列挙する。
【0094】
1. 被除数を除数で除算して、正確に丸め処理された商を生成する除算と、正確に丸め処理された平方根を生成する、ある値の開平算のうち少なくとも1つを実行する浮動小数点算術演算装置であって、前記算術演算装置が、
データを記憶するためのマルチポート記憶装置、
2つの数を乗算して積を求め、2つの数を加算して和を求める算術演算手段、
除算、及び開平算のうちの少なくとも1つについて演算結果の近似値を提供する近似手段、
タッカーマン検査を用いて除算、及び開平算のうちの少なくとも1つの演算結果の近似値を正確に丸め処理するための手順を含む丸め処理マイクロコード、及び
前記浮動小数点算術演算装置を制御する制御装置からなり、
前記丸め処理マイクロコードが、演算結果の近似値が過小評価された値になるようにし、タッカーマン検査を早期終了させることによって、演算結果の近似値を正確に丸め処理して、正確に丸め処理された結果を生成する、浮動小数点算術演算装置。
【0095】
2. 前記丸め処理マイクロコードが演算結果の近似値を正確に丸め処理する手段を含み、前記丸め処理手段が、
タッカーマン検査を実行して演算結果の近似値をどのように丸め処理するかを判定する手段、
タッカーマン検査の中間結果の符号をチェックする手段、及び
前記中間結果の符号に基づいて、タッカーマン検査の実行終了を早め、演算結果の近似値を正確に丸め処理する手段を含むことを特徴とする、項番1に記載の浮動小数点算術演算装置。
【0096】
3. 前記丸め処理マイクロコードが、演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価したものになるようにする過小評価手段を更に含むことを特徴とする、項番2に記載の浮動小数点算術演算装置。
【0097】
4. 前記丸め処理マイクロコードが演算結果の近似値を正確に丸め処理して、正確に丸め処理された演算結果を生成する、丸め処理手段を含み、前記丸め処理手段が、
タッカーマン検査を実行して演算結果の近似値をどのように丸め処理するかを判定する手段、
所定の値をタッカーマン検査の中間結果と比較して比較結果を生成する手段、及び
前記比較結果に基づいてタッカーマン検査の実行終了を早め、演算結果の近似値を正確に丸め処理する手段を含むことを特徴とする、項番1に記載の浮動小数点算術演算装置。
【0098】
5. 前記丸め処理マイクロコードが、演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価した値になるようにする過小評価手段を更に含むことを特徴とする、項番4に記載の浮動小数点算術演算装置。
【0099】
6. 拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を、正確に丸め処理して、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、及び開平算の演算結果の近似値を受信するステップ、
(b)演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価した値になるようにするステップ、及び
(c)拡張タッカーマン検査を実行して演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成するステップからなる方法。
【0100】
7. 前記拡張タッカーマン検査の実行ステップ(c)によって中間演算結果が生成され、前記拡張タッカーマン検査の実行ステップ(c)が、
(c1)拡張タッカーマン検査の中間結果のうちの少なくとも1つの符号をチェックするステップ、及び
(c2)中間結果のうちの少なくとも1つの符号に基づいて、前記拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを含むことを特徴とする、項番6に記載の方法。
【0101】
8. 前記拡張タッカーマン検査の実行ステップ(c)が、
(c3)所定の値を拡張タッカーマン検査の中間結果のうちの1つと比較して比較結果を生成するステップ、及び
(c4)前記比較結果に基づいて前記拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを更に含むことを特徴とする、項番7に記載の方法。
【0102】
9. 前記所定の値が、拡張タッカーマン検査によって計算されるべき剰余項の大きさに関する境界であることを特徴とする、項番8に記載の方法。
【0103】
10. 前記の終了ステップ(c4)が、中間演算結果が正であり、剰余項の大きさに関する境界より大きい時に早期に発生することを特徴とする、項番9に記載の方法。
【0104】
11. 前記拡張タッカーマン検査の実行ステップ(c)が、
(c1)所定の値を拡張タッカーマン検査の中間結果のうちの1つと比較して比較結果を生成するステップ、及び
(c2)前記比較結果に基づいて、拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを更に含む、項番6に記載の方法。
【0105】
12. 前記所定の値が、拡張タッカーマン検査によって計算されるべき剰余項の大きさに関する境界であることを特徴とする、項番11に記載の方法。
【0106】
13. 前記終了ステップ(c2)が、中間演算結果が正であり、剰余項の大きさに関する境界より大きい時に早期に発生することを特徴とする、項番12に記載の方法。
【0107】
14. 演算結果の近似値の殆どのビットが正確であることを保証できることを特徴とする、項番6に記載の方法。
【0108】
15. 拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、又は開平算の演算結果の近似値を求めるステップであって、前記演算結果の近似値が、正確に丸め処理された演算結果に必要な桁数を越えた、余分で正確な桁を有するステップ、
(b)可能であれば、余分で正確な桁の値を用いて、演算結果の近似値を正確に丸め処理するステップ、
(c)(b)が行なわれない時、拡張タッカーマン検査を用いて演算結果の近似値を正確に丸め処理するステップ、及び
(d)正確に丸め処理された演算結果を所望の桁数に切り捨てるステップからなる方法。
【0109】
16. 拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、又は開平算の演算結果の近似値を求めるステップ、
(b)演算結果の近似値の、正確であることが保証されていない桁を0にセットするステップ、及び
(c)拡張タッカーマン検査を用いて前記の0にセットされた桁のそれぞれを連続して、かつ個々に正確に丸め処理するステップからなる方法。
【0110】
17. 前記演算結果の近似値が、正確に丸め処理された演算結果と同じ桁数を有することを特徴とする、項番16に記載の方法。
【0111】
18. 加算装置、乗算装置、及び制御装置を有する浮動小数点算術演算回路であって、タッカーマン検査を用いて開平算、又は除算の演算結果の近似値が正確に丸め処理されて、正確に丸め処理された演算結果が生成され、前記タッカーマン検査を、早期終了条件をチェックするように修正する浮動小数点算術演算回路。
【0112】
【発明の効果】
本発明によって、高精度数の商、又は平方根を正確な結果に最も近い浮動小数点数に、正確に丸め処理を行うための浮動小数点算術演算装置が提供される。
【図面の簡単な説明】
【図1】本発明の第1の実施例に従う、浮動小数点算術演算装置のブロック図である。
【図2】本発明の第2の実施例に従う、浮動小数点算術演算装置のブロック図である。
【図3】制御装置によって実行される基本動作のフローチャートである。
【図4】拡張フォーマットの本発明実施例によって実施される動作のフローチャートである。
【図5】拡張フォーマットの実施例の一例に関する、切り捨て動作の図である。
【図6】非拡張フォーマットの本発明によって実施される動作のフローチャートである。
【図7】非拡張フォーマットの一例に関する、演算結果の近似値を示す図である。
【図8】本発明による修正タッカーマン検査の一実施例のフローチャートである。
【符号の説明】
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 丸め処理マイクロコード
【産業上の利用分野】
本発明は浮動小数点算術演算装置を有するデータ処理システムに関し、より詳しくは高精度の丸め処理を行なう方法、及び装置に関する。
【0002】
【従来の技術】
従来、浮動小数点演算装置は除算、及び開平算を実行するためのハードウエア、又はソフトウエアを用いてきた。このハードウエアを用いたアプローチは、専用の除算回路と開平回路を用いるか、マイクロコードを加算回路、減算回路と共に用いるかのどちらかである。このマイクロコードは反復的手順を実行するよう機能する。このような反復的手順の例としては、引き放し級数拡張機構(nonrestoring series expansion)、及びNewton-Raphsonがある。ソフトウエアによるアプローチではプログラム命令を用いて反復的手順が実行される。
【0003】
【発明が解決しようとする課題】
どのアプローチを用いるかに関わらず、浮動小数点演算装置はほぼ近似的な結果、即ち最後の数ビットにしか誤差のない結果を得ることができる。従来のアプローチには、こうした浮動小数点演算装置が、精度の高い数(例えば4倍精度の数)に対して除算、又は開平算を行なって正確な結果に最も近い浮動小数点数を得ることを要求される場合、最後の数ビットについて正しい値を得るのに非常に多くの時間をとられるという問題がある。例えば、既存の代表的なワークステーションでは、近似値を約13サイクルで得ることができるが、正確な結果に最も近い値を得るには約134サイクルを要する。
【0004】
最後の数ビットについて正しい値を得るのに要する非常に多くの時間のために、コンピュータ・メーカーの中には最後の数ビットについて正しい値を求めようとしないものさえある。従来、妥当な時間内に得ることのできた精度は、多くのアプリケーションでは充分とされる、小さな値のULP(ULPは最終桁位置における単位の数値)までの精度であるが、中にはより高い精度を必要とするアプリケーションもある。即ち、アプリケーションによっては演算結果の精度が1/2 ULP以下でなければならないものがある。
【0005】
問題は既知のアプローチでは最後の数ビットの精度を効率的に決定することができないことである。従来、精度を1ビット上げようとすれば、処理時間もより多くかかっていた。特に、精度を上げるために、追加的な繰り返しが行なわれうるが、最後の数ビットを決定するためのこのような繰り返しは処理時間の観点からは非常に大きな犠牲を伴なうものである。
【0006】
既知のアプローチの他の問題点としては、単調性を得ることが困難であることである。又、従来の殆どのアプローチでは1/2 ULP以下の精度を有する演算結果を得ることができず、演算結果が変わってくる可能性があるため、本来のライブラリ関数を簡単にアップグレードすることはできない。単調性、又は高い精度(例えば1/2 ULP)が必要とされ、それが浮動小数点算術演算装置で得られない場合、異なる演算結果が生成される可能性があり、それによって、その結果同じ値あるいは予測された値が返されない時、ユーザーに混乱を招く恐れがある。
【0007】
従って、正しく丸め処理が行われた高精度の演算結果を効率的かつ安定的に生成する、丸め処理技術が未だに必要とされている。
【0008】
【課題を解決するための手段】
本発明は浮動小数点算術演算装置が商、又は平方根を高精度に計算することを可能にするものであり、商、又は平方根は正確な演算結果に最も近い浮動小数点数に正確に丸め処理される。本発明は、ハードウエアによって提供されるものより高い精度で丸め処理を行うことに広く応用することができる。
【0009】
丸め処理を行なう前に、浮動小数点算術演算装置内のハードウエアが最後の数桁を除いて正しい高精度の仮数を生成する。次に、本発明の丸め処理技術を用いて正しく丸め処理された演算結果が生成される。本発明は拡張タッカーマン検査を利用して、検査を早期に終了するためのチェックを行ないながら、開平と除算の両方に関して最後の小さな値のULPに関する正しい値を得るものである。早期終了のための検査を行なうことの利点は、丸め処理の判断が必要とされる平均計算時間が大幅に低減されることである。
【0010】
本発明の浮動小数点算術演算装置の一実施例は、被除数を除数で割って正しく丸め処理された商を得る除算と、ある値から正しく丸め処理された平方根を得る開平算のうちの少なくとも1つを行なう。この算術演算装置は、データを記憶するためのマルチポート記憶装置、2つの数を乗算して積を求め、2つの数を加算して和を求めるための算術手段、除算と開平算のうちの少なくとも1つに関して近似された演算結果を提供する近似手段、拡張タッカーマン検査を用いて除算と開平算のうちの少なくとも1つの近似された演算結果を正しく丸め処理するための手順を含んだ丸め処理マイクロコード、及びこの浮動小数点算術演算装置を制御するための制御装置を有する。丸め処理マイクロコードは、まずこの近似された演算結果が過小評価されるよう保証し、次にタッカーマン検査の中間結果に基づいてタッカーマン検査を早く終了させることを可能にすることによって、近似された演算結果に正確に丸め処理を施し、正確に丸め処理された演算結果を生成する。
【0011】
本発明は方法としても実施することができる。この方法は拡張タッカーマン検査を用いて除算、又は開平算の演算結果の高精度な近似値を正確に丸め処理するものである。この方法はデータ処理システムにおいて実行され、除算、又は開平算の演算結果の近似値を求めることから始まる。演算結果の近似値のビットの殆どは正しいことが保証される。次に、この方法ではこの演算結果の近似値が実際の結果より過小評価されたものであるよう保証する。その後、拡張タッカーマン検査を実行してこの演算結果の近似値をどのように丸め処理するかを決定することによって、この演算結果の近似値を正確に丸め処理して、正確に丸め処理された演算結果を生成する。拡張タッカーマン検査は、タッカーマン検査の中間結果の符号、及び/又は大きさに基づいて、その検査を早く終了することができる場合、正しく丸め処理された演算結果を従来より速く得ることができるという点で有益である。
【0012】
添付図面に関連して以下でなされる詳細な説明により、本発明を容易に理解することができる。又ここで参照する図面では、同一の構成要素に対して同一の参照番号が付されている。
【0013】
【実施例】
本発明は浮動小数点算術演算装置に用いることを意図したものである。本発明を用いることによって、浮動小数点算術演算装置はハードウエアによって得られる精度の少なくとも2倍の精度を有する演算結果を生成することができる。好適には、ハードウエアではNビットの精度の数しか直接演算することができないところを、本発明では2Nビットの近似値を正確に丸め処理することができる。例えば、ハードウエアが2倍精度の演算結果を提供することができる場合、本発明は正確に丸め処理された4倍精度の演算結果を提供できる。
【0014】
本発明は多倍精度の数にも適用することができる。多倍精度の数は4倍精度より高い精度を有する数である。このような数は単精度浮動小数点配列に記憶することができる。一実施例において、この配列内の最初のワードは整数の値を有する浮動小数点数であり、その絶対値は仮数部にあるワード数を表わす。最初のワードの符号は多倍精度の数の符号である。次のワードは基数に関する指数を表わす整数の値を有する浮動小数点数である。小数点は最初の仮数ワードの後にくる。既知のソフトウエア・ライブラリ・ルーチンを用いてこれらの数に算術演算を実行することができる。例えば、1992年5月にCalifornia州、Moffett Field、NASA Ames Research Center、NAS Applied Research Branchから刊行されたRNR Technical Report RNR-90-022のBailey著“A Portable High Performance Multiprecision Package”を参照されたい。
【0015】
以下で、本発明の実施例を図1から図8に関連して説明する。しかし、当業者には、本発明がこうした実施例以外にも適用可能であるため、これらの図面を参照してここで行なわれる詳細な説明は例示に過ぎないということが理解されるであろう。
【0016】
図1は浮動小数点算術演算装置100の第1の実施例を示す。この実施例は4倍精度数を2つの倍精度フォーマットで記憶するものである。この浮動小数点算術演算装置100は乗算と加算用に個別の回路を有する。
【0017】
マルチポート・レジスタ・ファイル102は読み出しポートA、B、C、及びDと書き込みポートE、及びFを有する。レジスタ・ファイル102はNビットのワード・サイズを有するデータを記憶する。乗算装置104が読み出しポートA、及びBに接続されて、それぞれが被乗数と乗数を受信するようになっている。乗算装置104は桁上げ伝搬加算器(CPA)106に高位部分積と低位部分積を与える。次に、CPA 106によって生成された和が、丸め処理インクリメンタ108によって2Nビットに丸め処理される。丸め処理インクリメンタ108を用いることが好適ではあるが、こうした中間の丸め処理は本発明には必須ではない。
【0018】
丸め処理された演算結果は2つのNビットの部分からなり、これらの部分はそれぞれ高位部分積ラッチ110と低位部分積ラッチ112に保持される。多重装置114はラッチ110、112からラッチされたNビットの部分を受信する。多重装置114の出力はレジスタ・ファイル102の書き込みポートEに接続され、これによって乗算による2つのNビットの部分を、高位部分積と低位部分積に関する、2つの書き込み動作でレジスタ・ファイル102に記憶することができる。
【0019】
従って、読み出しポートA、及びBは乗算装置104に被乗数と乗数を提供する。乗算結果は2つのNビット値からなり、これらが丸め処理されて、一時記憶のためにレジスタ・ファイル102の書き込みポートEに送られる。
【0020】
レジスタ・ファイル102の他のポートは浮動小数点算術演算装置100の加算回路に対応する。位置合わせシフタ116が、レジスタ・ファイル102の読み出しポートC、及びDから加数を受信し、加算を行なえるようにそれらを位置合わせする。次に桁上げ伝搬加算器(CPA)118が、位置合わせされた値を加算して正規化シフタ120に和を供給する。次に、正規化された和が丸め処理インクリメンタ122によって2Nビットに丸め処理されて、丸め処理された和が得られる。この場合も、丸め処理インクリメンタ122は厳密な意味では必須ではない。丸め処理された和の最初のNビットは高位部分ラッチ124にラッチされ、次のNビットは低位部分ラッチ126にラッチされる。多重装置128がラッチ124、126からラッチされた和を入力として受信し、それらを2パスで書き込みポートFに送信する。
【0021】
制御装置130が実行すべき命令を受信し、図1に示す様々な回路に必要な制御信号132を提供する。従って、制御装置130は乗算、及び加算回路を制御して命令を実行する。
【0022】
浮動小数点算術演算装置100が、高精度の丸め処理を適当に実行するよう適応させるために、丸め処理マイクロコード134が提供され、制御装置130へのアクセスが可能となっている。この丸め処理マイクロコード134に含まれる手順を次に詳細に説明する。
【0023】
この丸め処理マイクロコード134は演算結果の近似値をハードウエアによる精度より高い精度で正確に丸め処理するよう動作する。この丸め処理の対象となる演算結果の近似値は、ある程度のビット数まで正確であることが保証できれば、幾通りかの方法で生成されうる。
【0024】
例えば、丸め処理の対象となる演算結果を生成する方法の1つが“FLOATING POINT ARITHMETIC UNIT USING MODIFIED NEWTON-RAPHSON TECHNIQUE FOR DIVISION AND SQUARE ROOT”と題する米国特許出願08/058,164号に説明されており、この出願は、ここで参照することによって本明細書に組み込まれる。このようなアプローチを用いて、浮動小数点算術演算装置100の制御装置130は除算、及び開平マイクロコード(図示せず)を用いた精度の高い除算、及び開平算命令を実行する。除算、及び開平マイクロコードは会話型手順を使用する。この会話型手順は逆数、又は平方根の逆数(reciprocal square root)の初期推定から始まるため、浮動小数点算術演算回路100は逆数、及び平方根の逆数の初期推定テーブル(図示せず)にもアクセスすることができる。これらの初期推定値は、乗算回路、又は加算回路のどちらかで使用できるようにレジスタ・ファイル102に供給される。
【0025】
図2は本発明の第2の実施例による浮動小数点算術演算装置200のブロック図である。図2に示す浮動小数点算術演算装置200は乗算加算融合(MAF)設計のものである。即ち、乗算装置と加算器が融合されて乗算と加算が1つの極小単位の動作として発生するものである。
【0026】
マルチポート・レジスタ・ファイル202は読み出しポートA、B、及びCと、書き込みポートDを含む。乗算装置204は読み出しポートA、及びBから被乗数と乗数を受信して積を生成する。位置合わせシフタ206が読み出しポートCから加数を受け取り、乗算装置204からの信号207を用いて、前記積の指数に従ってこの加数を位置合わせする。
【0027】
3:2桁上げ保存型加算器208は乗算装置204と位置合わせシフタ206からの入力を受信し、少なくとも2Nビットの出力を桁上げ伝搬加算器(CPA)210に提供する。桁上げ保存型加算器208からの先頭の2Nビットが必要とされる。CPA 210は2Nビットの演算結果を生成し、次にこれが正規化シフタ212によって正規化され、丸め処理インクリメンタ214(これも厳密な意味で必須ではない)によって2Nビットの演算結果に丸め処理される。次に、この丸め処理された演算結果が2つのNビットの部分となって高位部分ラッチ216と低位部分ラッチ218にそれぞれ供給される。多重装置220がラッチ216、218からラッチされたNビットの部分を受信する。多重装置220の出力は、2つのNビットの部分が高位部分と低位部分のための2つの書き込み動作によってレジスタ・ファイル202に記憶されるように、レジスタ・ファイル202の書き込みポートDに接続される。
【0028】
制御装置222は様々な制御信号224を用いて、浮動小数点算術演算装置200の回路を制御する。制御装置222は特に、丸め処理を実行するために丸め処理マイクロコード226を用いる。丸め処理の対象となる演算結果の近似値は、浮動小数点算術演算装置200によって生成され、丸め処理が行なわれるまでレジスタ・ファイル202内に保持される。
【0029】
又、制御装置222は算術演算命令を実行する。制御装置222で受け取った命令が除算命令あるいは開平命令である場合、制御装置222は乗算、及び加算回路を用いて除算、及び開平算の実行に必要な反復的手順を実行するために、除算、及び開平マイクロコード(図示せず)にアクセスする。こうして、浮動小数点算術演算装置200は丸め処理の対象となる演算結果の近似値を生成することができる。
【0030】
性能上の理由から、第1、及び第2の実施例(図1、及び図2)を周知の回路を用いて更に拡張することができる。例えば、パイプラインを導入して追加ラッチを、レジスタ・ファイルと乗算装置あるいは位置合わせシフタの間に設けることができる。又、乗算装置あるいは位置合わせシフタに、より高速に入力を供給できるように、レジスタ・ファイル102と乗算装置104、及び位置合わせシフタの間に多重装置を挿入することもできる。しかし、これらの、及びその他の様々な周知の拡張は、本発明の一部をなすものではなく、むしろハードウエアに関する主要な設計上の選択の問題であり、従ってこれ以上詳細な説明は行わない。
【0031】
図3は制御装置130、222によって実行あるいは制御される基本的手順のフローチャートである。制御装置130、222が命令を受け取ると、浮動小数点算術演算装置100、200内で様々な演算が行なわれる。まず、命令が復号され(302)、そのオペランドが読み取られる(304)。次に、特殊なケースが存在するかどうかの判断(306)が行なわれる。オペランドが正規数でない場合に、特殊なケースが存在する。そのオペランドが正規数でない場合、演算はIEEE規格754-1985に従って「修正」され(308)、フロー制御はこれらの数が始めから正規数であったかのように続行される。例えば、これらの数の1つが0.02×10-3である場合、この数は処理を続行する前に0.2×10-4に「修正」(この場合は正規化)される。
【0032】
次に、命令が除算命令であるかどうかに基づいて判断(310)がなされる。その命令が除算命令である場合、制御装置130、222は除算マイクロコードを実行する(312)。その後、本発明によれば、この除算命令の演算結果が丸め処理マイクロコード134、226を用いて正確に丸め処理される(314)。
【0033】
判断310において、その命令が除算命令ではないと判定されると、この命令が開平命令であるかどうかが判断される(316)。この命令が開平命令である場合、制御装置130、222は開平マイクロコードを実行し(318)、その後丸め処理マイクロコード134、226を用いてこの開平命令の演算結果を正確に丸め処理する(320)。一方、判断316において、この命令が開平命令でないと判定された場合、図1、及び図2に示す乗算装置104、204と加算器118、208によって従来の態様で乗算(322)及び/又は加算(324)が実行される。その後、演算結果が一時的な記憶のためにレジスタ・ファイル102、202に書き戻される(326)。最後に、ブロック314、320、及び326の後で、制御フローはステップ302に戻って次の命令を復号する。
【0034】
次に、丸め処理マイクロコード134、226によって実行、又は起動される手順を図4、及び図6を参照して詳細に説明する。一般に、丸め処理マイクロコード134、226によって実行、又は起動される手順は、レジスタ内にどの様に数が記憶されているかによって異なる。殆どの機械は数の記憶フォーマットと同じ桁数のレジスタを有する(非拡張フォーマット)が、レジスタに追加のビットを有する(拡張フォーマット)機械もある。非拡張フォーマットであるか拡張フォーマットであるかによって実施態様が異なるため、これらを以下で別個に説明する。
【0035】
拡張フォーマットの丸め処理
拡張フォーマットを用いてIEEE規格754-1985を実施する機械がある(例えばIntelのx87浮動小数点コプロセッサ)。こうした機械は拡張フォーマットに従って、記憶フォーマットを越える桁数に対応するために更に数ビット多く保持できるレジスタを有する。
【0036】
この場合、本発明の総合的な目的は、(あらかじめ計算された)浮動小数点数の演算結果を、それが丸め処理をされた時に所望のビット数より多いビットを有する場合に、正確な演算結果になるよう丸め処理をすることである。ここでは、拡張フォーマットを用いる機械に関する丸め処理マイクロコード134、226によって実行、又は起動される手順について説明する。
【0037】
図4は拡張フォーマットの丸め処理400を実行する時に、丸め処理マイクロコード134、226(及び制御装置130、222)又はその他のソフトウエアによって実行される基本的手順のフローチャートである。後述のA:マイクロコードの疑似コード記述では高精度除算、及び開平に関する基本的疑似コードを示す。まず、丸め処理の対象となる演算結果の近似値が得られる(402)。この演算結果の近似値は、浮動小数点算術演算装置によって実行される除算、又は開平算の浮動小数点数の演算結果とすることができる。他のアプローチや設計を用いることも可能であり、図1、及び図2に示す浮動小数点算術演算装置は単なる例に過ぎない。演算結果の近似値を求める方法はここでは重要ではない。演算結果の近似値フォーマットが重要であり、殆ど(全てではない)が正確であることを保証された一定数の仮数ビットから成る。
【0038】
説明を行うために、ここではハードウエアは2倍精度までを処理可能で、4倍精度の演算結果を得ることのできる、2を基数とする演算を実行するものと仮定する。即ち、ハードウエア(2倍精度)の仮数部はメモリ内では53ビット幅であり、レジスタ内では64ビット幅であるものとする。又、これはレジスタがメモリ・フォーマット以上のビットを記憶するため、いわゆる拡張フォーマットと呼ばれる。この構成では、丸め処理をされていない4倍精度の演算結果はレジスタ内では128ビットである。更に、ハードウエア(恐らく除算、開平算のための除算、開平マイクロコードを有する)は128ビットの結果を生成し、そのうちの最初の125ビットは正確であることが保証されている。この例の場合の目的は、この演算結果を4倍精度の数に関するIEEEフォーマットである、113の仮数ビットに正確に丸め処理することである。
【0039】
図5はこの例の演算結果の近似値500のフォーマットを示す図である。この演算結果の近似値500は、全部で128ビットを有し、そのうちの最初の125のビット502は正確であることが保証されており、最後の3ビット504は正確であることが保証されていない。この例では、113ビットの結果のみを求めようとするため、ビット114からビット125までの正確なビット506は余分である。
【0040】
次に、判断404が行なわれる。この判断404はこの利用可能であり、又余分で正確なビットを用いて、丸め処理の判断を行うことが可能かの判断を行なう。判断404が、この余分で正確なビットを用いて丸め処理の判断を行なうことができる場合、余分で正確なビットを用いて演算結果の近似値が正確に丸め処理され(406)、正確に丸め処理された演算結果が生成される。
【0041】
この余分で正確なビットを利用して、切り捨てられた演算結果の近似値を正確に丸め処理することによって、本発明に最も忠実に従う丸め処理は通常、追加の計算を必要としない。この例の場合の丸め処理手順を表1に示す。
【0042】
【表1】
【0043】
この例の場合、ビット114からビット125までが、利用可能でかつ余分で正確なビット506である(図5)。統計的に、この例では、2,048の数のうちの1つを除く、この余分で正確なビット504全てを用いて、丸め処理の判断を行なうことができる。この拡張フォーマットを用いることによって、計算を用いずに正確に丸め処理ができない12ビット・パターンが1つだけ(即ち、2,048のうち1つの場合のみ)ある。従って、殆どの場合、この拡張フォーマットによって利用可能になる余分で正確なビットは、丸め処理の判断を行なうのに充分である。
【0044】
判断404でこの余分で正確なビットを用いて、丸め処理の判断ができないと判定された場合、更に計算が必要となる。まず、余分で保証されていないビット(図5の504)が0にセットされて(408)、過小評価された(又は等しい)演算結果を保証する。この例における過小評価された演算結果508が、0にセットされた保証されていないビット126からビット128を有するものとして図5に示されている。次に、この過小評価された演算結果が、修正タッカーマン検査を用いて正確に丸め処理され(410)、正確に丸め処理された結果が生成される。修正タッカーマン検査は、開平と除算の両方に関して機能し、早期の終了がチェックされることを除けば、従来の開平に対するタッカーマン検査と同様の動作である。その結果、タッカーマン検査が必要な場合でも、正確に丸め処理された演算結果を生成するのに要する計算時間は一般に、従来のタッカーマン検査に比べて大幅に低減される。以下で、修正タッカーマン検査について詳細に説明する。
【0045】
正確に丸め処理された演算結果(図5の510)がどのように生成されたかに拘わらず、いかなる場合にも、この正確に丸め処理された演算結果が所望のビット数に切り捨てられる(412)。図5に示す例では、丸め処理された結果は113ビットを有することになるので、128ビットの正確に丸め処理された演算結果510は切り捨てられて、最終的に113ビットの演算結果512になる。
【0046】
タッカーマン検査は平方根の近似値を丸め処理するのに用いることができることは周知である。今日の浮動小数点算術演算装置では、開平命令はべき級数評価、又はNewton-Raphson反復のいずれかを用いたソフトウエアで,通常実施される。どちらが使用されるにしても、最終ビットは適当な丸め処理モード(例えばIEEEには4つの丸め処理モードがある)に正確に丸め処理されなければならない。ここでは、最も近い値への丸め処理モードが仮定されている。開平の場合には、2つの丸め処理に関するアプローチが知られている。1つはNewton-Raphson法を更に反復するアプローチ(除算の場合にも使用可能である)である。もう一つは、平方根の近似値が正確に、最も近い値への丸め処理がなされているか、又は変更されなければならないか(1ULPの切り上げあるいは切り捨てを行なうべきか)を判定するための正確な基準を提供するタッカーマン検査を用いるアプローチである。1990年1月のIBM Journal of Research and Development、Vol. 34、No. 1、111-119ページのMarksteinの“Computation of elementary functions on the IBM RISC System/6000 processor”を参照されたい。この2つの周知のアプローチの問題点は、計算が集中することである。
【0047】
Newton-Raphsonの追加反復は計算量が大きい。これは、2倍精度の機械上でソフトウエアで実行されなければならない4倍精度数の乗算を必要とするためである。Newton-Raphson技法を簡単にするには、(yn+1 + μ113)と(yn+1)の剰余を計算する方法がある。ここでμ113は求める数の最後のULP(即ち、ここでは113番目のビット)を表わす。一般に、k回の反復の後、除算の剰余は(B - Ayk)であり、開平の剰余は(A - yk 2)である。剰余の小さいものが正確な演算結果となる。(yn+1 + μ113)の剰余の方が小さければ、大きいほうの数(yn+1 + μ113)が正確な演算結果である。(yn+1)の剰余の方が小さければ、小さいほうの数(yn+1)が正確な演算結果である。このアプローチは、Newton-Raphson反復を完了して結果を生成するのに余分に必要となる乗算と加算を省略することによって計算時間を僅かに短縮させるものである。
【0048】
タッカーマン検査によれば、gをx1/2の推定値とすると、g(g - μ)<x≦g(g + μ)の時(μは1ULP)にのみ、gは最も近い値に正確に丸め処理される。この丸め処理の判断は、丸め処理をされているビットの剰余の符号に基づいて行なわれる。このタッカーマン検査の剰余は(x - g2)である。この例では、丸め処理の判断はyn+1 + μ113/2の剰余の符号に基づいて行なうことができる。この剰余の符号が正である場合、大きい方の数(yn+1 + μ113)が所望の演算結果である。この符号が負である場合、小さいほうの数(yn+1)が所望の演算結果である。従来のタッカーマン検査(フル・タッカーマン検査と呼ばれる)の問題点は、処理時間の観点から見て計算量が多いということである。特に、ハードウエアによってサポートされる精度より高い精度のフル・タッカーマン検査を行なうことは、追加のNewton-Raphson反復を行なうのと同程度に計算量が多くなる。
【0049】
本発明は、ハードウエアによってサポートされる精度より高い精度を有する演算結果を丸め処理する場合に、より良い性能が得られるようにフル・タッカーマン検査を改良するものである。基本的には、本発明は中間演算結果を用いて丸め処理の判断を行なう能力を含むようにフル・タッカーマン検査を修正するものである。そこで、この検査は修正(あるいは拡張)タッカーマン検査と呼ばれる。
【0050】
より詳細には、この修正タッカーマン検査は早期終了条件をチェックする演算を含む。早期終了条件の存在をチェックする場合、修正タッカーマン検査は中間演算結果を所定の境界値と比較する。従って、拡張フォーマット内の利用可能で余分なビットが丸め処理の判断を行なうことができず、更に計算が必要な場合でも、通常フル・タッカーマン検査を避けることができる。まず、中間演算結果が負あるいは0であるとタッカーマン検査が停止されうる。この場合、より小さい値が用いられる。次に、中間演算結果が正であり、かつ全て負である剰余項の大きさに関する境界より大きい時にもタッカーマン検査が停止されうる。この場合、より大きな値が用いられる。
【0051】
η2より大きい全ての項を蓄積し、η3より大きい全ての項を計算した後、中間演算結果をチェックすることが有益である。ここでηはレジスタ内の数の精度を表わす。この例では、η=264である。従って、暗黙の「1」を有する正規化されたIEEE浮動小数点数、2倍精度数を用いる場合、仮数は「1」と「2」の間にある。従って、η2とη3の係数は「10」より小さい。値「10」は計算される必要のある項の数に、その最大値を掛けることによって得られる。計算は、剰余が正であり10η2より小さくなければ第1の項の集合の後に停止させることができ、剰余が正であり10η3より小さくなければ第2の項の集合の後に停止させることができる。
【0052】
従って、ランダムに剰余が分布する場合には、修正タッカーマン検査は16,384の入力のうちの1回を除いては全て第1の検査の後に終了する。この例では、修正タッカーマン検査は早く終わる場合9つの演算しか実行せず、そのうちの3つはハードウエアで行なうことのできる2倍精度の乗算である。
【0053】
図8は本発明の修正タッカーマン検査の一実施例のフローチャートである。この修正タッカーマン検査800はタッカーマン検査の中間演算結果を計算する(802)ことによって開始される。次に、この中間演算結果の符号に基づいて判断804が行なわれる。この中間演算結果の符号が負である場合、検査は早く終わり、この丸め処理がされていない演算結果の近似値を切り上げるべきではないことが示される(806)。一方、中間演算結果の符号が正である場合、別の判断808が行なわれる。この中間演算結果がこのタッカーマン検査の最終剰余である場合、判断808によって、タッカーマン検査はこの丸め処理のなされていない演算結果の近似値を切り上げるべきであることを示す(810)。
【0054】
中間演算結果がタッカーマン検査の最終剰余でない場合、他の判断812が行なわれる。中間演算結果が剰余項の大きさに関する境界より大きい場合、判断812によって早期終了が発生する。この場合、早期終了の結果、タッカーマン検査は丸め処理されていない演算結果の近似値を切り上げるべきことを示す(810)。一方、中間演算結果が剰余項の大きさに関する境界より大きくない場合、タッカーマン検査の最終的な剰余が正であると予想することはできない。従って、判断812の結果、処理はブロック802に戻ってタッカーマン検査の次の中間演算結果の処理が開始される。
【0055】
後述のB:修正タッカーマン検査の実施態様は、拡張あるいは非拡張フォーマットのどちらかを用いて除算、及び開平算を行なうことのできる修正タッカーマン検査の一実施例を示す。後述のB:修正タッカーマン検査の実施態様に示すマイクロコード型のプログラミングを図8に示す、より一般的な実施例と関係付けることが有益であるが、必ずしも必要ではない。後述のB:修正タッカーマン検査の実施態様にはハードウエアの精度ηをnで示している。後述のB:修正タッカーマン検査の実施態様に示す中間演算結果は変数gによって容易に識別される。最後の中間演算結果g[27]も又タッカーマン検査の最終剰余である。早期終了の判断804は、例えば行16、及び行27のそれぞれによって実施することができる。完全な実行の終了である判断808が、行38、及び行39によって示されている。他の早期終了の判断812は、例えば行17、及び行28のそれぞれによって実施することができ、ここで10η2と10η3がそれぞれの境界である。「1」が戻ると、丸め処理されていない演算結果の近似値が切り上げられ(即ち、演算結果の近似値のビット内で「1」が検査される)、「0」が戻ると、丸め処理されていない演算結果の近似値は切り上げられない(即ち、演算結果の近似値のビット内で「0」が検査される)。
【0056】
多倍精度の計算についても、新規な本発明による丸め処理を実施することが容易である。まず、本発明では半分の精度の乗算4つだけが必要であり、残りの演算は加算である。第2に、中間の計算は全て単一の余分なワードを用いて行なうことができる。唯一問題になる状況としては、演算結果において隣の上の位のワードの拡張になるよう正規化された、最も下の位のワードが0から始まりその後が全て1である場合である。幸運なことに、これはランダムに構成されたビットに関しては264分の1の確率でしか発生しない。従って、タッカーマン検査を行なう必要は殆どない(4倍精度のケースより良好でさえある)。タッカーマン検査が必要な場合でも、通常、上述したような中間演算結果をチェックすると検査は早く終了する。
【0057】
タッカーマン検査に関する以上の説明は主として開平算の結果を丸め処理する場合についてであったが、タッカーマン検査は除算にも適用できる。従来、タッカーマン検査は開平にのみ適用可能で、除算には適用できなかった。丸め処理のためのタッカーマン検査は近似式(yn+1 + μ113/2)2 = yn+1(yn+1 + μ113)を用いることによって開平用に公式化されている。しかし、除算用にはこうした式はないが、レジスタ内の余分なビットを用いて{B - A(yn+1 + μ113/2)}の符号が検査される。このような適応がなされると、{B - A(yn+1 + μ113/2)}が浮動小数点演算装置のレジスタに適合するため、タッカーマン検査をハードウエア内で実施することが可能になる。
【0058】
余分で正確なビットを利用することによって、本発明のアプローチは殆どの場合、タッカーマン検査の実施を回避することができる。タッカーマン検査が必要になる稀な場合では、修正タッカーマン検査が用いられる。これは修正タッカーマン検査が実質的に丸め処理の判断を行う速度を大幅に改善するためである。
【0059】
非拡張フォーマットの丸め処理
本実施例では、正確な平方根、又は商に最も近い浮動小数点数が余分なビットを用いずに計算される。この実施例に関して、4倍精度の数がメモリ、及びレジスタの両方にそれぞれ53の仮数ビットを有する2つの2倍精度の数として記憶されていると仮定する。ここで入力の長さは106ビットであり、最終的に丸め処理される演算結果は106ビットに正確に丸め処理されなければならない。
【0060】
例えば、上述した(従来の又は修正された)Newton-Raphson法は少なくとも102の正しいビットを有する演算結果の近似値を生成する。4ビットもの誤差がありうるため、標準的なタッカーマン検査を用いた丸め処理を行なうことはできない。Newton-Raphson法を更に2度繰り返せば正確な結果が得られるが、こうした追加の繰り返しは上述したように処理時間の観点から見て問題がある。その代わりに、本発明によれば、タッカーマン検査を用いた丸め処理が、異なるビット位置で6回適用される。
【0061】
図6は非拡張フォーマットの丸め処理マイクロコード134、226によって実行される演算のフローチャートである。まず、除算命令、又は開平命令の演算結果の近似値が得られる(602)。図4のブロック402と同様、この近似値はNewton-Raphson法に含まれる様々な方法で生成することができる。ここでは、演算結果の近似値は、全てではないが殆どのビットが正確であることが保証される。この例では、106ビットの演算結果の近似値のうち、最初の102ビットは正確であることが保証される。
【0062】
次に、この演算結果の近似値のうち正確であることが保証されないビットが0にセットされる(604)。その後、判断606が行なわれる。0にセットされた全てのビットが個々に処理されていない場合、このビットの隣にある未処理のビットが、早期終了のためのチェックを行なう修正タッカーマン検査を用いて丸め処理される(608)。この修正タッカーマン検査については上述し、かつ後述のA:マイクロコードの疑似コード記述、及びB:修正タッカーマン検査の実施態様で詳細に説明する。0にセットされたビットが全て個々に処理された後、ブロック606において、丸め処理が停止される。これは、正確に丸め処理された演算結果がすでに得られたためである。
【0063】
図7は、この例における非拡張フォーマット丸め処理手順の動作を示す。602で得られる演算結果の近似値は53ビットの仮数を有する2つの2倍精度の数700、702からなる。これら2つの2倍精度数700、702は一緒にされて、正確に丸め処理されるべき演算結果の近似値704を形成する。ここで、最初の102ビット706は正確であることが保証されているため、103番目、104番目、105番目、及び106番目のビット708が0にセットされる(604)。正確な演算結果は過小評価されているため、正確に丸め処理された102ビットの演算結果は102ビットの数、又はこの102ビットの数にそのULPであるμ102を加えた数のどちらかである。次に、初回のタッカーマン検査が適用される。このタッカーマン検査でより大きい数を用いるべきであることが示されると、103番目のビットは1でなければならず、従ってこのビットはμ103を加えることによって1にセットされる。この演算結果は過小評価されたままであるが、103ビットに修正される。同じ手順が103番目、104番目、及び105番目のビットについても繰り返される。その後、タッカーマン検査が最後に106番目のビットに適用されるが、ここで検査によって演算結果が小さ過ぎることが示された場合、μ106が加算される。
【0064】
この例ではタッカーマン検査は4回繰り返されることに注目されたい。実行速度を上げるために、後述のB:修正タッカーマン検査の実施態様に示す修正タッカーマン検査を実施して繰り返すべき演算の数が低減される。即ち、vk(検査が行なわれる点)に依存する項だけが再計算される。従って、初回の検査が成功する、最良の性能を有する場合では、最初の検査で9つの演算が実行され、追加の検査1回につき1つの演算が実行されるため、合計の演算数は13になる。最悪の性能を有する場合では、最初の検査に27の演算、追加の検査それぞれに9つの演算が必要であり、演算数は合計で63になる。通常、2回目の検査で最終的な結果が得られ、この場合最初の検査に18の演算、追加の演算にそれぞれ4つの演算が必要であり、演算数の合計は34となる。幸運なことには、繰り返される演算には乗算がない。多倍精度算術演算の場合これは重要である。従来、これと同じ精度を得るためには、正確な106ビットの演算結果を得るのにNewton-Raphson反復を更に2回行なって215ビットを計算する必要があった。タッカーマン検査を繰り返し適用する本発明のアプローチは、従来のアプローチより明らかに高速である。
【0065】
しかし、開始の演算結果の判定には注意しなければならない。例えば、正確に丸め処理された演算結果が16進ストリング“8000001”になる場合、2ULPだけ過小評価された開始値は7FFFFFFHEXである。上述の手順に従えば、丸め処理された演算結果は8000000HEXである。この状況は、初期評価7FFFFF0HEXプラス10HEXをタッカーマン検査を用いて検査することによって説明することができる。タッカーマン検査によって過小評価であることがわかれば、大きい方の値8000000HEXが初期評価値として用いられ、過小評価でなければ小さい方の値7FFFFF0HEXが用いられる。この追加の検査にはタッカーマン検査を更に一度繰り返すことが必要である。
【0066】
拡張フォーマットの実施例と同様に、本実施例の場合も、タッカーマン検査を除算に用いることはより難しい。本実施例を拡張フォーマットの実施例のアプローチで行なうと、yn+1 + μ106/2が用いられるが、浮動小数点算術演算装置のレジスタには適合しない。その代わり、本実施例のハードウエアは拡張フォーマットをサポートしないため、タッカーマン検査の剰余はB - Ayn+1 - Aμ106から計算される。yn+1はB/Aに対する非常に近似的な値であるため、最初の2つの項はほぼ打ち消されて正の値が残る。これは正確な商が過小評価されたためである。項Aμ106はハードウエアによって簡単に計算、及び記憶することができる。これは演算結果が、アンダーフローがなければAを再び基準化したものであるためである。
【0067】
一般的考慮事項
以上の説明は、正確な答えに最も近い浮動小数点演算結果を返す「最も近い値への丸め処理」モードについて行なった。IEEE浮動小数点規格、ANSI/IEEE 754-1985には、その他の3つの処理モード、即ち「ゼロへの丸め処理」モード、「正の無限大への丸め処理」モード、及び「負の無限大への丸め処理」モードがある。本発明は「最も近い値への丸め処理」モードに関するものであるが、この浮動小数点演算装置は、オプションで他の丸め処理モードを用いるようにも動作可能である。しかし、そのためには上記の拡張フォーマットの実施例、及び非拡張フォーマットの実施例(除算と開平算にNewton反復を用いるものと仮定する)に以下の変更を行う必要がある。
【0068】
拡張フォーマットの実施例では、手順の違いは次の通りである。
【0069】
-ゼロへの丸め処理:単にNewton反復からの出力を返す。
【0070】
-正の無限大への丸め処理:演算結果が正である場合、Newton反復からの出力に1ULPを加算する。演算結果が負である場合は、単にNewton反復からの出力を返す。
【0071】
-負の無限大への丸め処理:演算結果が負である場合、Newton反復の出力から1ULPを減算する。演算結果が正である場合は、単にNewton反復からの出力を返す。
【0072】
非拡張フォーマットの実施例では、手順は(計算値を生成する)最初の5回のタッカーマン丸め処理については同じであり、それ以降は次のように異なる。
【0073】
-ゼロへの丸め処理:単に計算値を返す。
【0074】
-正の無限大への丸め処理:演算結果が負である場合、計算値から1ULPを減算する。演算結果が正である場合は、単に計算値を返す。
【0075】
-負の無限大への丸め処理:演算結果が正である場合、計算値に1ULPを加算する。演算結果が負である場合は、単に計算値を返す。
【0076】
これらの手順では、開始値が所望の丸め処理された演算結果の過小評価された値であることを前提としているため、これらの代替的手順によって正確な演算結果が常に正しく処理されるわけではない。従って上記の丸め処理を行なう前に1ULP(拡張フォーマットの場合μ128、非拡張フォーマットの場合μ106)を減算することによって、過小評価された値が確実に得られる。
【0077】
以上の説明は、浮動小数点演算装置が2つの2倍精度数に対する算術演算の4倍精度の演算結果を返す命令を有することを前提としている。即ち、本発明はハードウエアが2つのハードウエア精度数の積の全ての桁、及び和の先頭の4倍(例えば2N)精度部を提供することができることを前提としている。既存のコンピュータの中には、2つの2倍精度数の乗算の4倍精度の結果(即ち全ての桁)を返すハードウエア命令を有するものと、こうした命令を持たないものがある。又、コンピュータによっては2つの数の和の4倍精度部を返す命令を有するものもある(例えばIBM S/370)。
【0078】
ハードウエアがこれらの条件を満たすことが好適ではあるが、それが不可能である場合、ソフトウエアを併用してその条件を満たすようにすることもできる。2つの2倍精度数の積の4倍精度の演算結果を返すハードウエアを増強するのに用いることのできるコードの例を表2に示す。より詳細には、表2には次のように1つの単精度フォーマットに記憶された2つの2倍精度数の積の全てのビットを返すためのC言語コードを示す。この例では、変数は単精度数として記憶される。
【0079】
【表2】
【0080】
従って、演算結果は4つの単精度数c[0]、c[1]、c[2]、及びc[3]として返される。このアプローチは、2倍精度フォーマットが2つの単精度数の積より少なくとも2桁大きい桁数を有することを前提としており、これはIEEEの浮動小数点の規格に適合する。
【0081】
和は指数が実質的に異なる場合、非常に大きな桁数を有することがある。本発明ではこの演算結果の先頭の4倍精度部(例えば2Nビット)を必要とする。従って、ハードウエアがこの先頭の2Nビットを直接検索することができない場合があるため、2つの2倍精度数の和の先頭の4倍精度部を返すのに用いることのできるC言語コードの一例を表3に示す。
【0082】
【表3】
【0083】
この例では、入力の上位部と下位部は別個の単精度ワードに記憶され、次にこの上位部と下位部が加算され、下位から上位への桁上げが生じる。その和が4つの単精度数c[0]、c[1]、c[2]、及びc[3]として記憶される。
【0084】
従って、本発明では2つのハードウエア精度数の積の全ての桁、及び和の先頭の2Nビット(例えば4倍)精度部へのアクセスを必要とするが、本発明ではハードウエアの欠点をソフトウエアで補うことができるため、浮動小数点算術演算装置内に(乗算器、及び加減算装置以外の)特殊なハードウエアを必要としない。しかし、こうしたソフトウエアを用いることによって性能は低下する。
【0085】
本発明の多くの特徴と利点は以上の説明から明らかであろう。従って、特許請求の範囲にはこうした特徴と利点の全てが含まれているものである。更に、当業者には本発明に対して様々な修正や変更を加えることが容易であるため、本発明はここに図示、及び説明した構造や動作に厳密に制限されるものではない。従って、適切な変更、及び同等物の全ては本発明の範囲内に含まれる。
【0086】
A : マイクロコードの疑似コード記述
ここでは高精度の除算、及び開平算結果を得て、これを正確に丸め処理するために制御ユニット134、226によって実行されるマイクロコードの疑似コード記述を示す。
【0087】
【表4】
【0088】
関数u(A)、及びd(B,A)はそれぞれ最大で4つのビットに誤差のある平方根、及び商を返す。ルーチンtはULP uに修正タッカーマン検査を実行する。その結果平方根Fと商Gが得られ、それぞれ演算結果の誤差は1/2 ULP以下である。
【0089】
【表5】
【0090】
B : 修正タッカーマン検査の実施態様
ここでは除算のための修正タッカーマン検査の実施態様を示す。この実施態様は修正タッカーマン検査をマイクロコードで実施するよう定義するものである。より詳細には、この実施態様は、UNIXデスクトップ計算機bc用のC言語のようなプログラミング言語を用いるものとして記述される。この方法は演算に含まれるビット数を完全に制御できるように整数を用いて実施される。下記の実施態様にはUNIXデスクトップ計算機に用いられる2、3のユーティリティ・ルーチンが組み込まれている。即ち、ルーチンh(a,n)はaに基数nのobaseを有する第1の桁を返し、ルーチンl(a,n)はaに基数nのobaseを有する第2の桁を返す。ここで、obaseは出力に用いられる基数である。
【0091】
【表6】
【0092】
B−2 : 修正タッカーマン検査 - 開平(a 1/2 )
開平のための修正タッカーマン検査は上記の除算のための実施態様と同様に実施することができる。唯一の相違点はフォーマットがv(a,y,y,u)となることである。
【0093】
以下に本発明の実施態様を列挙する。
【0094】
1. 被除数を除数で除算して、正確に丸め処理された商を生成する除算と、正確に丸め処理された平方根を生成する、ある値の開平算のうち少なくとも1つを実行する浮動小数点算術演算装置であって、前記算術演算装置が、
データを記憶するためのマルチポート記憶装置、
2つの数を乗算して積を求め、2つの数を加算して和を求める算術演算手段、
除算、及び開平算のうちの少なくとも1つについて演算結果の近似値を提供する近似手段、
タッカーマン検査を用いて除算、及び開平算のうちの少なくとも1つの演算結果の近似値を正確に丸め処理するための手順を含む丸め処理マイクロコード、及び
前記浮動小数点算術演算装置を制御する制御装置からなり、
前記丸め処理マイクロコードが、演算結果の近似値が過小評価された値になるようにし、タッカーマン検査を早期終了させることによって、演算結果の近似値を正確に丸め処理して、正確に丸め処理された結果を生成する、浮動小数点算術演算装置。
【0095】
2. 前記丸め処理マイクロコードが演算結果の近似値を正確に丸め処理する手段を含み、前記丸め処理手段が、
タッカーマン検査を実行して演算結果の近似値をどのように丸め処理するかを判定する手段、
タッカーマン検査の中間結果の符号をチェックする手段、及び
前記中間結果の符号に基づいて、タッカーマン検査の実行終了を早め、演算結果の近似値を正確に丸め処理する手段を含むことを特徴とする、項番1に記載の浮動小数点算術演算装置。
【0096】
3. 前記丸め処理マイクロコードが、演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価したものになるようにする過小評価手段を更に含むことを特徴とする、項番2に記載の浮動小数点算術演算装置。
【0097】
4. 前記丸め処理マイクロコードが演算結果の近似値を正確に丸め処理して、正確に丸め処理された演算結果を生成する、丸め処理手段を含み、前記丸め処理手段が、
タッカーマン検査を実行して演算結果の近似値をどのように丸め処理するかを判定する手段、
所定の値をタッカーマン検査の中間結果と比較して比較結果を生成する手段、及び
前記比較結果に基づいてタッカーマン検査の実行終了を早め、演算結果の近似値を正確に丸め処理する手段を含むことを特徴とする、項番1に記載の浮動小数点算術演算装置。
【0098】
5. 前記丸め処理マイクロコードが、演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価した値になるようにする過小評価手段を更に含むことを特徴とする、項番4に記載の浮動小数点算術演算装置。
【0099】
6. 拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を、正確に丸め処理して、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、及び開平算の演算結果の近似値を受信するステップ、
(b)演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価した値になるようにするステップ、及び
(c)拡張タッカーマン検査を実行して演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成するステップからなる方法。
【0100】
7. 前記拡張タッカーマン検査の実行ステップ(c)によって中間演算結果が生成され、前記拡張タッカーマン検査の実行ステップ(c)が、
(c1)拡張タッカーマン検査の中間結果のうちの少なくとも1つの符号をチェックするステップ、及び
(c2)中間結果のうちの少なくとも1つの符号に基づいて、前記拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを含むことを特徴とする、項番6に記載の方法。
【0101】
8. 前記拡張タッカーマン検査の実行ステップ(c)が、
(c3)所定の値を拡張タッカーマン検査の中間結果のうちの1つと比較して比較結果を生成するステップ、及び
(c4)前記比較結果に基づいて前記拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを更に含むことを特徴とする、項番7に記載の方法。
【0102】
9. 前記所定の値が、拡張タッカーマン検査によって計算されるべき剰余項の大きさに関する境界であることを特徴とする、項番8に記載の方法。
【0103】
10. 前記の終了ステップ(c4)が、中間演算結果が正であり、剰余項の大きさに関する境界より大きい時に早期に発生することを特徴とする、項番9に記載の方法。
【0104】
11. 前記拡張タッカーマン検査の実行ステップ(c)が、
(c1)所定の値を拡張タッカーマン検査の中間結果のうちの1つと比較して比較結果を生成するステップ、及び
(c2)前記比較結果に基づいて、拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを更に含む、項番6に記載の方法。
【0105】
12. 前記所定の値が、拡張タッカーマン検査によって計算されるべき剰余項の大きさに関する境界であることを特徴とする、項番11に記載の方法。
【0106】
13. 前記終了ステップ(c2)が、中間演算結果が正であり、剰余項の大きさに関する境界より大きい時に早期に発生することを特徴とする、項番12に記載の方法。
【0107】
14. 演算結果の近似値の殆どのビットが正確であることを保証できることを特徴とする、項番6に記載の方法。
【0108】
15. 拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、又は開平算の演算結果の近似値を求めるステップであって、前記演算結果の近似値が、正確に丸め処理された演算結果に必要な桁数を越えた、余分で正確な桁を有するステップ、
(b)可能であれば、余分で正確な桁の値を用いて、演算結果の近似値を正確に丸め処理するステップ、
(c)(b)が行なわれない時、拡張タッカーマン検査を用いて演算結果の近似値を正確に丸め処理するステップ、及び
(d)正確に丸め処理された演算結果を所望の桁数に切り捨てるステップからなる方法。
【0109】
16. 拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、又は開平算の演算結果の近似値を求めるステップ、
(b)演算結果の近似値の、正確であることが保証されていない桁を0にセットするステップ、及び
(c)拡張タッカーマン検査を用いて前記の0にセットされた桁のそれぞれを連続して、かつ個々に正確に丸め処理するステップからなる方法。
【0110】
17. 前記演算結果の近似値が、正確に丸め処理された演算結果と同じ桁数を有することを特徴とする、項番16に記載の方法。
【0111】
18. 加算装置、乗算装置、及び制御装置を有する浮動小数点算術演算回路であって、タッカーマン検査を用いて開平算、又は除算の演算結果の近似値が正確に丸め処理されて、正確に丸め処理された演算結果が生成され、前記タッカーマン検査を、早期終了条件をチェックするように修正する浮動小数点算術演算回路。
【0112】
【発明の効果】
本発明によって、高精度数の商、又は平方根を正確な結果に最も近い浮動小数点数に、正確に丸め処理を行うための浮動小数点算術演算装置が提供される。
【図面の簡単な説明】
【図1】本発明の第1の実施例に従う、浮動小数点算術演算装置のブロック図である。
【図2】本発明の第2の実施例に従う、浮動小数点算術演算装置のブロック図である。
【図3】制御装置によって実行される基本動作のフローチャートである。
【図4】拡張フォーマットの本発明実施例によって実施される動作のフローチャートである。
【図5】拡張フォーマットの実施例の一例に関する、切り捨て動作の図である。
【図6】非拡張フォーマットの本発明によって実施される動作のフローチャートである。
【図7】非拡張フォーマットの一例に関する、演算結果の近似値を示す図である。
【図8】本発明による修正タッカーマン検査の一実施例のフローチャートである。
【符号の説明】
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 丸め処理マイクロコード
Claims (18)
- 被除数を除数で除算して、正確に丸め処理された商を生成する除算と、正確に丸め処理された平方根を生成する、ある値の開平算のうち少なくとも1つを実行する浮動小数点算術演算装置であって、前記算術演算装置が、
データを記憶するためのマルチポート記憶装置、
2つの数を乗算して積を求め、2つの数を加算して和を求める算術演算手段、
除算、及び開平算のうちの少なくとも1つについて演算結果の近似値を提供する近似手段、
タッカーマン検査を用いて除算、及び開平算のうちの少なくとも1つの演算結果の近似値を正確に丸め処理するための手順を含む丸め処理マイクロコード、及び
前記浮動小数点算術演算装置を制御する制御装置からなり、
前記丸め処理マイクロコードが、演算結果の近似値が過小評価された値になるようにし、タッカーマン検査を早期終了させることによって、演算結果の近似値を正確に丸め処理して、正確に丸め処理された結果を生成する、浮動小数点算術演算装置。 - 前記丸め処理マイクロコードが演算結果の近似値を正確に丸め処理する手段を含み、前記丸め処理手段が、
タッカーマン検査を実行して演算結果の近似値をどのように丸め処理するかを判定する手段、
タッカーマン検査の中間結果の符号をチェックする手段、及び
前記中間結果の符号に基づいて、タッカーマン検査の実行終了を早め、演算結果の近似値を正確に丸め処理する手段を含むことを特徴とする、請求項1に記載の浮動小数点算術演算装置。 - 前記丸め処理マイクロコードが、演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価したものになるようにする過小評価手段を更に含むことを特徴とする、請求項2に記載の浮動小数点算術演算装置。
- 前記丸め処理マイクロコードが演算結果の近似値を正確に丸め処理して、正確に丸め処理された演算結果を生成する丸め処理手段を含み、前記丸め処理手段が、
タッカーマン検査を実行して演算結果の近似値をどのように丸め処理するかを判定する手段、
所定の値をタッカーマン検査の中間結果と比較して比較結果を生成する手段、及び
前記比較結果に基づいてタッカーマン検査の実行終了を早め、演算結果の近似値を正確に丸め処理する手段を含むことを特徴とする、請求項1に記載の浮動小数点算術演算装置。 - 前記丸め処理マイクロコードが、演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価した値になるようにする過小評価手段を更に含むことを特徴とする、請求項4に記載の浮動小数点算術演算装置。
- 拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を、正確に丸め処理して、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、及び開平算の演算結果の近似値を受信するステップ、
(b)演算結果の近似値が正確に丸め処理された演算結果に対応する、実際の演算結果を過小評価した値になるようにするステップ、及び
(c)拡張タッカーマン検査を実行して演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成するステップからなる方法。 - 前記拡張タッカーマン検査の実行ステップ(c)によって中間演算結果が生成され、前記拡張タッカーマン検査の実行ステップ(c)が、
(c1)拡張タッカーマン検査の中間結果のうちの少なくとも1つの符号をチェックするステップ、及び
(c2)中間結果のうちの少なくとも1つの符号に基づいて、前記拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを含むことを特徴とする、請求項6に記載の方法。 - 前記拡張タッカーマン検査の実行ステップ(c)が、
(c3)所定の値を拡張タッカーマン検査の中間結果のうちの1つと比較して比較結果を生成するステップ、及び
(c4)前記比較結果に基づいて前記拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを更に含むことを特徴とする、請求項7に記載の方法。 - 前記所定の値が、拡張タッカーマン検査によって計算されるべき剰余項の大きさに関する境界であることを特徴とする、請求項8に記載の方法。
- 前記の終了ステップ(c4)が、中間演算結果が正であり、剰余項の大きさに関する境界より大きい時に早期に発生することを特徴とする、請求項9に記載の方法。
- 前記拡張タッカーマン検査の実行ステップ(c)が、
(c1)所定の値を拡張タッカーマン検査の中間結果のうちの1つと比較して比較結果を生成するステップ、及び
(c2)前記比較結果に基づいて、拡張タッカーマン検査の実行(c)終了を早め、演算結果の近似値を正確に丸め処理するステップを更に含む、請求項6に記載の方法。 - 前記所定の値が、拡張タッカーマン検査によって計算されるべき剰余項の大きさに関する境界であることを特徴とする、請求項11に記載の方法。
- 前記終了ステップ(c2)が、中間演算結果が正であり、剰余項の大きさに関する境界より大きい時に早期に発生することを特徴とする、請求項12に記載の方法。
- 演算結果の近似値の殆どのビットが正確であることを保証できることを特徴とする、請求項6に記載の方法。
- 拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、又は開平算の演算結果の近似値を求めるステップであって、前記演算結果の近似値が、正確に丸め処理された演算結果に必要な桁数を越えた、余分で正確な桁を有するステップ、
(b)可能であれば、余分で正確な桁の値を用いて、演算結果の近似値を正確に丸め処理するステップ、
(c)(b)が行なわれない時、拡張タッカーマン検査を用いて演算結果の近似値を正確に丸め処理するステップ、及び
(d)正確に丸め処理された演算結果を所望の桁数に切り捨てるステップからなる方法。 - 拡張タッカーマン検査を用いて除算、又は開平算の高精度の演算結果の近似値を正確に丸め処理し、正確に丸め処理された演算結果を生成する方法であって、前記方法がデータ処理システム内で実行され、
(a)除算、又は開平算の演算結果の近似値を求めるステップ、
(b)演算結果の近似値の、正確であることが保証されていない桁を0にセットするステップ、及び
(c)拡張タッカーマン検査を用いて前記の0にセットされた桁のそれぞれを連続して、かつ個々に正確に丸め処理するステップからなる方法。 - 前記演算結果の近似値が、正確に丸め処理された演算結果と同じ桁数を有することを特徴とする、請求項16に記載の方法。
- 加算装置、乗算装置、及び制御装置を有する浮動小数点算術演算回路であって、タッカーマン検査を用いて開平算、又は除算の演算結果の近似値が正確に丸め処理されて、正確に丸め処理された演算結果が生成され、前記タッカーマン検査を、早期終了条件をチェックするように修正する浮動小数点算術演算回路。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US270203 | 1994-07-01 | ||
US08/270,203 US5671170A (en) | 1993-05-05 | 1994-07-01 | Method and apparatus for correctly rounding results of division and square root computations |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0844538A JPH0844538A (ja) | 1996-02-16 |
JP3541086B2 true JP3541086B2 (ja) | 2004-07-07 |
Family
ID=23030346
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP16516795A Expired - Fee Related JP3541086B2 (ja) | 1994-07-01 | 1995-06-30 | 除算結果、及び開平算結果に正確な丸め処理を行う方法、及び装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3541086B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113342671B (zh) * | 2021-06-25 | 2023-06-02 | 海光信息技术股份有限公司 | 对运算模块进行验证的方法、装置、电子设备和介质 |
-
1995
- 1995-06-30 JP JP16516795A patent/JP3541086B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH0844538A (ja) | 1996-02-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5671170A (en) | Method and apparatus for correctly rounding results of division and square root computations | |
US5515308A (en) | Floating point arithmetic unit using modified Newton-Raphson technique for division and square root | |
CN107077417B (zh) | 有效性配准 | |
US6240433B1 (en) | High accuracy estimates of elementary functions | |
Ziv | Fast evaluation of elementary mathematical functions with correctly rounded last bit | |
US7720900B2 (en) | Fused multiply add split for multiple precision arithmetic | |
US6360241B1 (en) | Computer method and apparatus for division and square root operations using signed digit | |
JPH08185309A (ja) | 4倍精度演算の実行方法 | |
JPH1078863A (ja) | 浮動小数点式ハードウェアを用いたマイクロプロセッサ整数除法演算を実行するための方法および装置 | |
US10579338B2 (en) | Apparatus and method for processing input operand values | |
Wang et al. | A survey of hardware designs for decimal arithmetic | |
CN106250098B (zh) | 用于在执行浮点运算时控制舍入的装置及方法 | |
US20080263336A1 (en) | Processor Having Efficient Function Estimate Instructions | |
Nannarelli | Variable precision 16-bit floating-point vector unit for embedded processors | |
Nannarelli | Tunable floating-point for energy efficient accelerators | |
Schulte et al. | A variable-precision interval arithmetic processor | |
US6912559B1 (en) | System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit | |
US10459688B1 (en) | Encoding special value in anchored-data element | |
US6598065B1 (en) | Method for achieving correctly rounded quotients in algorithms based on fused multiply-accumulate without requiring the intermediate calculation of a correctly rounded reciprocal | |
JPH0687218B2 (ja) | 浮動小数点数演算処理装置及び除数倍数生成装置 | |
JP3541086B2 (ja) | 除算結果、及び開平算結果に正確な丸め処理を行う方法、及び装置 | |
JPH0687219B2 (ja) | 制御方法 | |
Tsen et al. | Hardware design of a binary integer decimal-based IEEE P754 rounding unit | |
US10963245B2 (en) | Anchored data element conversion | |
Iordache et al. | An Overview of Floating-point Support and Math Library on the Intel/spl reg/XScale/spl trade/architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040130 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040302 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040329 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |