(57)【要約】【課題】丸め誤差の大きさと演算結果との大小関係を、丸め誤差として作成することができ、さらに丸め誤差を浮動小数点フォーマットに変換し、引き続き行われる演算にスムーズに利用可能な数値演算プロセッサの丸め処理装置を提供する。【解決手段】）数値演算プロセッサ３の丸め部１０において、丸め前の仮数ｂ（Ｓ１７）と丸め後の仮数ｄ（Ｓ２２）の差をとり、丸め誤差の符号と大きさをもつ丸め誤差Ｓ２３を生成する丸め誤差作成部１７と、丸め誤差作成部１７の生成した丸め誤差を記憶し、演算部ストローブバスＳ２１で制御され、内部データバスＳ４を介して、ホストプロセッサから記憶した丸め誤差の読み出しを、任意の時点で行える丸め誤差記憶部１８を備えたものである。【選択図】    図１
2004252554.tif 000002
【特許請求の範囲】
【請求項１】
丸めモードに従って、正規化部（９）で生成された仮数ｂ（Ｓ１７）に丸めを行い、仮数ｄ（Ｓ２２）を生成する丸め計算部（１１）と、
符号ｂ（Ｓ１５）、指数ｂ（Ｓ１６）および仮数ｄ（Ｓ２２）から演算結果を作成する浮動小数点数作成部（１２）と、
前記仮数ｄ（Ｓ２２）からオーバーフローとアンダーフローの例外を作成する例外生成部（１３）と、
前記仮数ｄ（Ｓ２２）が非正規化数かどうかを検査する非正規化数検出部（１４）と、
前記非正規化数検出部（１４）で非正規化数を検出した場合、前記仮数ｄ（Ｓ２２）から指数ｃ（Ｓ１８）を生成する指数生成部（１５）と、
前記仮数ｄ（Ｓ２２）から仮数ｃ（Ｓ１９）を生成する仮数生成部（１６）より構成される丸め部（１０）を備えた数値演算プロセッサ（３）において、
丸め前の仮数ｂ（Ｓ１７）と丸め後の仮数ｄ（Ｓ２２）の差をとり、丸め誤差の符号と大きさをもつ丸め誤差（Ｓ２３）を生成する丸め誤差作成部（１７）と、
前記丸め誤差作成部（１７）の生成した丸め誤差を記憶し、演算部ストローブバス（Ｓ２１）で制御され、内部データバス（Ｓ４）を介して、ホストプロセッサから記憶した丸め誤差の読み出しを、任意の時点で行える丸め誤差記憶部（１８）を備えることを特徴とする数値演算プロセッサの丸め処理装置。
【請求項２】
前記丸め誤差作成部（１７）は，丸め前の仮数ｂ（Ｓ１７）と丸め後の仮数ｄ（Ｓ２２）の大きさの比較から符号ｆ（Ｓ２７）を生成する丸め誤差符号生成部（１９）と、
丸め前の仮数ｂ（Ｓ１７）と丸め後の仮数ｄ（Ｓ２２）の差の絶対値を正規化して仮数ｅ（Ｓ２５）および正規化に伴う指数調整を行うための指数調整値（Ｓ２４）とを生成する丸め誤差仮数生成部（２０）と、
指数ｂ（Ｓ１６）と指数調整値（Ｓ２４）から指数ｆ（Ｓ２８）を生成し、指数ｂ（Ｓ１６）より指数調整値（Ｓ２４）のほうが大きい場合に指数調整値（Ｓ２４）と指数ｂ（Ｓ１６）の差から仮数調整値（Ｓ２６）を生成する丸め誤差指数生成部（２１）と、
前記仮数調整値（Ｓ２６）を用いて仮数ｅ（Ｓ２５）の再調整を行い仮数ｆ（Ｓ２９）を生成する丸め誤差仮数調整部（２２）と、
符号ｆ（Ｓ２７）、指数ｆ（Ｓ２８）および仮数ｆ（Ｓ２９）からＩＥＥＥ７５４規格により定義された浮動小数点数フォーマットの丸め誤差（Ｓ２３）を生成する丸め誤差浮動小数点数作成部（２３）を備えることを特徴とする請求項１記載の数値演算プロセッサの丸め処理装置。
【請求項３】
前記丸め誤差記憶部（１８）として、制御レジスタ部（５）を利用したことを特徴とする請求項１または２に記載の数値演算プロセッサの丸め処理装置。
【請求項４】
前記丸め部（１０）に浮動小数点数作成部（１２）と丸め誤差作成部（１７）の出力である丸め誤差（Ｓ２３）を一つのデータに連結するデータパック部（２４）を備え、このデータパック部（２４）の出力を記憶する前記丸め誤差記憶部（１８）として、データレジスタ部（６）を利用したことを特徴とする請求項１または２に記載の数値演算プロセッサの丸め処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、浮動小数点を演算する数値演算プロセッサの丸め処理装置に関する。
【０００２】
【従来の技術】
最初に、ＩＥＥＥ７５４規格の浮動小数点フォーマットについて図７および図８を用いて説明する。図７は浮動小数点フォーマットを示す図、図８はガードビットを示す図である。
浮動小数点数Ｎ１は、図７に示すように符号部Ｎ２、指数部Ｎ３と仮数部Ｎ４がエンコードされたものである。例えば単精度の場合、浮動小数点数は３２ビットで、符号部が１ビット、指数部が８ビット、仮数部が２３ビットである。符号部が正負を、指数部が大きさを、仮数部が精度となる。仮数は
１．０≦仮数＜２．０
となるように正規化される。小数点の左側の１は必ず存在するため、この１ビットはあるものとして、仮数部には小数点の右側の小数が入る。次に、浮動小数点で演算を行う時にＩＥＥＥ７５４規格では仮数を無限大の精度をもつものとして演算するように記述されている。そのために仮数部のＬＳＢ側には、図８に示すようにガードビットＮ５と呼ばれる、余分なビットをつけて演算回路を構成し、ＩＥＥＥ７５４規格を満足させる。そのため、このガードビットは最終的に何らかの処理を施す必要があり、これが丸め処理になる。
【０００３】
次に、従来の数値演算プロセッサについて、図５および図６を用いて説明する。図５は従来技術を示す数値演算プロセッサの丸め処理装置のブロック図、図６は図５の演算部の詳細を示したブロック図である。
図５において、１はマイクロプロセッサ、２はメモリ、３は数値演算プロセッサ、４は制御部、５は制御レジスタ部、６はデータレジスタ部、７は演算部、８は演算器、９は正規化部、１０は丸め部である。マイクロプロセッサ１、メモリ２および数値演算プロセッサ３はデータバスＳ１、アドレスバスＳ２およびストローブバスＳ３で接続されている。数値演算プロセッサ３は、内部データバスＳ４によりデータバスＳ１と接続されると共に、該プロセッサ内に設けた制御部４と、制御レジスタ部５、データレジスタ部６および演算部７が内部データバスＳ４により夫々接続されている。演算部７内はデータレジスタ部６のデータを入力として、オペコードＳ９で指示された演算を実行し、符号ａ（Ｓ１２）、指数ａ（Ｓ１３）および仮数ａ（Ｓ１４）を生成する演算器８と、符号ａ（Ｓ１２）、指数ａ（Ｓ１３）および仮数ａ（Ｓ１４）を入力として、正規化を実行し、符号ｂ（Ｓ１５）、指数ｂ（Ｓ１６）と仮数ｂ（Ｓ１７）を生成する正規化部９と、符号ｂ（Ｓ１５）、指数ｂ（Ｓ１６）と仮数ｂ（Ｓ１７）を入力として、丸めモードＳ１０に従い丸めを行い演算結果となる浮動小数点数を生成する丸め部１０から構成される。
丸め部１０では非正規化数が発生する可能性があるため、発生した場合には指数ｃ（Ｓ１８）と仮数ｃ（Ｓ１９）と非正規化数発生信号Ｓ２０を生成し、正規化部９に再入力する。演算器８、正規化部９および丸め部１０ではオーバーフローや不正確等の例外Ｓ１１を発生する。アドレスバスＳ２と接続された内部アドレスバスＳ５と、ストローブバスＳ３と接続された内部ストローブバスＳ６は、制御部４と接続されている。演算部７の動作モードなどを設定する制御レジスタ部５へのデータのリード、ライトは、制御レジスタ部ストローブバスＳ７で制御される。同様に、演算部７のデータとなるデータレジスタ部６へのデータのリード、ライトは、データレジスタ部ストローブバスＳ８で制御される。演算部７のデータの入出力等の動作は、演算部ストローブバスＳ２１で制御される。以上の構成において、数値演算プロセッサ３はデータレジスタ部６に書き込まれたデータを入力として演算部７で浮動小数点数による演算を実行し、結果をデータレジスタ部６に書き込む。
【０００４】
続いて，図６では丸め部１０について説明する。
図６において，１１は丸め計算部、１２は浮動小数点数作成部、１３は例外生成部、１４は非正規化数検出部、１５は指数生成部、１６は仮数生成部である。
丸め部１０は、正規化部９で生成された、符号ｂ（Ｓ１５）、指数ｂ（Ｓ１６）および仮数ｂ（Ｓ１７）を入力とする。仮数ｂ（Ｓ１７）は丸め計算部１１に入力され丸めモードＳ１０に従い丸めを行い仮数ｄ（Ｓ２２）を生成する。
ＩＥＥＥ７５４では、最近値丸め、０方向への丸め、正の無限大方向への丸めと負の無限大方向への丸めの４つが、丸めモードとして規定されている。符号ｂ（Ｓ１５）、指数ｂ（Ｓ１６）および仮数ｄ（Ｓ２２）は浮動小数点数作成部１２に入力され演算結果となる浮動小数点数を生成する。仮数ｂ（Ｓ１７）は例外生成部１３に入力されて、丸めが行われた場合に発生する不正確例外の検出を行い、例外Ｓ１１を発生させる。仮数ｄ（Ｓ２２）はさらに非正規化数検出部１４に入力され、丸め後に非正規化数が発生しているか検査し、非正規化数発生信号Ｓ２０を生成する。指数生成部１５は、非正規化数発生信号Ｓ２０と指数ｂ（Ｓ１６）を入力として指数ｃ（Ｓ１８）を、仮数生成部１６は、非正規化数発生信号Ｓ２０と仮数ｂ（Ｓ１７）を入力として仮数ｃ（Ｓ１９）を、それぞれ生成して、正規化部９に再入力する。このように、正規化や丸めは時間のかかる処理であり、従来の数値演算プロセッサの丸め回路において、丸め処理の高速性を改善するものが提案されている（例えば、特許文献１参照）。
【０００５】
【特許文献１】
特開平８−２０２５３１号公報（明細書７頁，１０頁，１１頁、図２）
【０００６】
特開平８−２０２５３１号公報記載の図２において、マルチステージの実行パイプラインによる、ある演算の実行中に生じる解を丸める装置は、演算がいつ繰返しになるかと解に関連した精度ビットとを検出して、丸め計算が必要かどうかを判定する第１回路を含んでいる。第１回路は丸め計算が必要なことを検出すると、丸めモードと検出精度に従って解の補正ファクタをセットする。この装置によって実施される方法では、ＡＬＵ演算の実行中に生じる解の丸めは、演算が繰返しのとき、解に関連した精度ビットを検出して丸め計算が必要かどうかを判定するステップと、丸め計算が必要なとき、丸めモードと検出精度ビットに従って解の補正ファクタをセットするステップを通して生じる。これにより、従来の丸め回路は演算時間の短縮を図っている。
【０００７】
【発明が解決しようとする課題】
しかしながら、従来技術の丸め回路は丸め処理の処理時間の短縮が目的であり、丸め時に発生する丸め誤差については鑑みられたものはなく、整数や固定小数点の丸めと異なり、浮動小数点数の演算では丸め誤差の小数点位置が変化するという問題があった。これより丸め誤差の取り得る値の範囲が非常に広いことになり、例えば、制御系などの演算のように、丸め誤差まで含めて管理する必要がある場合に問題となる。
次に、例えば乗算のように、ガードビットのサイズを大きくすることで、演算回路での演算精度を高くできるが、丸め処理でこの演算精度が捨てられてしまう。
さらに、丸め前の値をソフトウェアでは読み出すことができないので、丸め誤差の大きさを知ることができないという根本的な問題を有している。
【０００８】
本発明は上記問題を解決するためになされたものであり、演算回路での演算精度を損なうことなく、丸め誤差と演算結果を比較することにより、丸め誤差の大きさと演算結果の大小関係を丸め誤差として作成することができ、さらに丸め誤差を浮動小数点フォーマットに変換し、引き続き行われる演算にスムーズに利用することが可能な数値演算プロセッサの丸め処理装置を提供することを目的とする。
【０００９】
【課題を解決するための手段】
上記問題を解決するため、請求項１に記載の数値演算プロセッサの丸め処理装置に係る発明は、丸めモードに従って、正規化部で生成された仮数ｂに丸めを行い、仮数ｄを生成する丸め計算部と、符号ｂ、指数ｂおよび仮数ｄから演算結果を作成する浮動小数点数作成部と、前記仮数ｄからオーバーフローとアンダーフローの例外を作成する例外生成部と、前記仮数ｄが非正規化数かどうかを検査する非正規化数検出部と、前記非正規化数検出部で非正規化数を検出した場合、前記仮数ｄから指数ｃを生成する指数生成部と、前記仮数ｄから仮数ｃを生成する仮数生成部より構成される丸め部を備えた数値演算プロセッサにおいて、丸め前の仮数ｂと丸め後の仮数ｄの差をとり、丸め誤差の符号と大きさをもつ丸め誤差を生成する丸め誤差作成部と、前記丸め誤差作成部の生成した丸め誤差を記憶し、演算部ストローブバスで制御され、内部データバスを介して、ホストプロセッサから記憶した丸め誤差の読み出しを、任意の時点で行える丸め誤差記憶部を備えたものである。
【００１０】
このような手段により、丸め誤差と演算結果を比較することによって、丸め誤差の大きさと演算結果との大小関係を取得することができる。
また、丸めにより本来は捨てられるハードウェアの演算精度を、丸め誤差として取得することができる。
【００１１】
また、請求項２の発明は，請求項１記載の数値演算プロセッサの丸め処理装置において、前記丸め誤差作成部は，丸め前の仮数ｂと丸め後の仮数ｄの大きさの比較から符号ｆを生成する丸め誤差符号生成部と、丸め前の仮数ｂと丸め後の仮数ｄの差の絶対値を正規化して仮数ｅおよび正規化に伴う指数調整を行うための指数調整値とを生成する丸め誤差仮数生成部と、指数ｂと指数調整値から指数ｆを生成し、指数ｂより指数調整値のほうが大きい場合に指数調整値と指数ｂの差から仮数調整値を生成する丸め誤差指数生成部と、前記仮数調整値を用いて仮数ｅの再調整を行い仮数ｆを生成する丸め誤差仮数調整部と、符号ｆ、指数ｆおよび仮数ｆからＩＥＥＥ７５４規格により定義された浮動小数点数フォーマットの丸め誤差を生成する丸め誤差浮動小数点数作成部を備えたものである。
【００１２】
このような手段により，ＩＥＥＥ７５４規格のフォーマットで丸め誤差を生成させることで、丸め誤差も浮動小数点数で統一して管理することができる。
また、丸めにより、本来は捨てられるハードウェアの演算精度を、丸め誤差として取得することができる。そのため、ハードウェアの持つ演算精度をソフトウェアにも反映することができる。
さらに、丸め誤差が演算を行っている浮動小数点数と同じフォーマットなので、演算にこの丸め誤差を利用することにより、非常に精度の高い演算を行うことができる。
【００１３】
また、請求項３の発明は，請求項１または２に記載の数値演算プロセッサの丸め処理装置において、前記丸め誤差記憶部として、制御レジスタ部を利用したものである。
【００１４】
このような手段により、制御レジスタ部に丸め誤差を記憶させることにより、記憶回りの回路を簡略化することができる。
【００１５】
また、請求項４の発明は，請求項１または２に記載の数値演算プロセッサの丸め処理装置において、前記丸め部に浮動小数点数作成部と丸め誤差作成部の出力である丸め誤差を一つのデータに連結するデータパック部を備え、このデータパック部の出力を記憶する前記丸め誤差記憶部として、データレジスタ部を利用したものである。
【００１６】
このような手段により、演算結果と丸め誤差をペアで、データレジスタ部に記憶させることにより、演算値と演算の結果発生した丸め誤差をペアで扱えるため、演算結果と丸め誤差を、より詳細に管理することができる。
【００１７】
【発明の実施の形態】
以下、本発明の実施例を図に基づいて具体的に説明する。
［第１実施例］
図１は本発明の第１実施例を示す数値演算プロセッサの丸め処理装置のブロック図である。なお、本発明の構成要素が従来技術と同じものについては、同一符号を付してその説明を省略し、異なる点のみ説明する。
図に於いて、１７は丸め誤差作成部、１８は丸め誤差記憶部である。
本発明が従来技術と異なる点は、以下のとおりである。
すなわち、丸め部１０において、丸め前の仮数ｂ（Ｓ１７）と丸め後の仮数ｄ（Ｓ２２）の差をとり、丸め誤差の符号と大きさをもつ丸め誤差（Ｓ２３）を生成する丸め誤差作成部（１７）と、丸め誤差作成部（１７）の生成した丸め誤差を記憶し、演算部ストローブバス（Ｓ２１）で制御され、内部データバス（Ｓ４）を介して、ホストプロセッサから記憶した丸め誤差の読み出しを、任意の時点で行える丸め誤差記憶部（１８）を備えた点である。
【００１８】
次に，数値演算プロセッサ３の丸め部１０を用いた丸め処理について説明する
。
まず，浮動小数点数による演算は、図６で説明した従来例と同じであるので、正規化部９が生成した、符号ｂ（Ｓ１５）、指数ｂ（Ｓ１６）と仮数ｂ（Ｓ１７）を用いて、丸め誤差を生成し、その丸め誤差を記憶する様子を説明する。なお、丸めモードとして最近値丸めを行うものとする。
丸め計算部１１では丸めモードに従い、ガードビットを含んだ仮数ｂ（Ｓ１７）に丸め処理を行い仮数ｄ（Ｓ２２）を生成する。丸め誤差作成部１７では、仮数ｂ（Ｓ１７）と仮数ｄ（Ｓ２２）を用いて丸め誤差を以下のようにして作成する。まず、仮数ｂ（Ｓ１７）が、
０１０００００００００００００００００００００００００
の場合、下位２ビットがガードビットで、上位２ビット目と３ビット目の間に小数点がある。この事は、これ以降の説明でも同様である。この時、仮数ｂ（Ｓ１７）はガードビットが０のため、丸め処理は行われず丸め誤差としては０００を生成する。仮数ｂ（Ｓ１７）が、
０１００００００００００００００００００００００００１
の場合、丸め処理を行った結果の仮数ｄ（Ｓ２２）は
０１０００００００００００００００００００００００００
であり、
００００００００００００００００００００００００００１
の大きさの丸め誤差が生じている。仮数ｄ（Ｓ２２）の最下位２ビットに、仮数ｂ＞仮数ｄのため負を示すため最上位を１とし、丸め誤差として１０１を生成する。仮数ｂ（Ｓ１７）が、
０１０００００００００００００００００００００００１０
の場合、丸め処理を行った結果の仮数ｄ（Ｓ２２）は
０１００００００００００００００００００００００１００
であり、
０００００００００００００００００００００００００１０
の大きさの丸め誤差が生じている。さらに、仮数ｂ＜仮数ｄのため、符号は０として、０１０を丸め誤差として生成する。仮数ｂ（Ｓ１７）が、
０１０００００００００００００００００００００００１１
の場合、丸め処理を行った結果の仮数ｄ（Ｓ２２）は
０１００００００００００００００００００００００１００
であり、
００００００００００００００００００００００００００１
の大きさの丸め誤差が生じている。さらに、仮数ｂ＜仮数ｄのため、符号は０として００１を丸め誤差として生成する。この例では、ガードビットを２ビットで説明しているが、ガードビットのビット数を多くすると、丸め誤差の精度も向上する。例えば、ガードビットを２３ビットにして、１６進数で３ｆ８００００１である単精度浮動小数点数の二乗を考える。仮数は、
０１００００００００００００００００００００００１
であり、乗算の結果は
０１００００００００００００００００００００００１０００００００００００００００００００００００１
となる。丸め処理後の仮数はガードビットのビット数にかかわらず、
０１００００００００００００００００００００００１
となる。符号を考えないと、ガードビットが２ビットの場合は、丸め誤差は
００
であるが、２３ビットの場合は、
０００００００００００００００００００００００１
となる。
【００１９】
このようにして得られた丸め誤差は丸め誤差記憶部１８に記憶される。マイクロプロセッサからのアクセスがあると、制御部で演算部ストローブバスＳ２１が生成され、丸め誤差記憶部１８の値が読み出される。ソフトウエアで、この読み出した丸め誤差と演算結果の指数部を利用し、ＩＥＥＥ７５４規格のフォーマットの浮動小数点数へ変換も行える。
【００２０】
［第２実施例］
図２は、本発明の第２実施例を示す数値演算プロセッサの丸め処理装置のブロック図である。
図において，１９は丸め誤差符号生成部、２０は丸め誤差仮数生成部、２１は丸め誤差指数生成部、２２は丸め誤差仮数調整部、２３は丸め誤差浮動小数点数作成部である。
第２実施例が第１実施例と異なる点は以下のとおりである。
すなわち、丸め誤差作成部１７が丸め誤差符号生成部１９、丸め誤差仮数生成部２０、丸め誤差指数生成部２１、丸め誤差仮数調整部２２および丸め誤差浮動小数点数作成部２３から構成されている点である。
ここで、丸め誤差符号生成部１９は、丸め前の仮数ｂ（Ｓ１７）と丸め後の仮数ｄ（Ｓ２２）の大きさの比較から符号ｆ（Ｓ２７）を生成するものである。また、丸め誤差仮数生成部２０は、丸め前の仮数ｂ（Ｓ１７）と丸め後の仮数ｄ（Ｓ２２）の差の絶対値を正規化して仮数ｅ（Ｓ２５）および正規化に伴う指数調整を行うための指数調整値（Ｓ２４）とを生成する。さらに、丸め誤差指数生成部２１は、指数ｂ（Ｓ１６）と指数調整値（Ｓ２４）から指数ｆ（Ｓ２８）を生成し、指数ｂ（Ｓ１６）より指数調整値（Ｓ２４）のほうが大きい場合に指数調整値（Ｓ２４）と指数ｂ（Ｓ１６）の差から仮数調整値（Ｓ２６）を生成する。
そして、丸め誤差仮数調整部（２２）は、前記仮数調整値（Ｓ２６）を用いて仮数ｅ（Ｓ２５）の再調整を行い仮数ｆ（Ｓ２９）を生成する。丸め誤差浮動小数点数作成部（２３）は、符号ｆ（Ｓ２７）、指数ｆ（Ｓ２８）および仮数ｆ（Ｓ２９）からＩＥＥＥ７５４規格により定義された浮動小数点数フォーマットの丸め誤差（Ｓ２３）を生成するものである。なお、第２実施例の同浮動小数点数による演算は、第１実施例と同じく、図６で説明した従来例と同じである。
【００２１】
次に，正規化部９が生成した、符号ｂ（Ｓ１５）、指数ｂ（Ｓ１６）と仮数ｂ（Ｓ１７）を用いて、丸め誤差を生成し、その丸め誤差を記憶する様子を説明する。丸めモードは最近値丸めとする。
丸め誤差符号生成部は、丸め前の仮数ｂ（Ｓ１７）と丸め後の仮数ｄ（Ｓ２２）の比較を行い、仮数ｂ（Ｓ１７）≦仮数ｄ（Ｓ２２）のとき正を示す０を、仮数ｂ（Ｓ１７）＞仮数ｄ（Ｓ２２）のとき負を示す１を値として、符号ｆ（Ｓ２７）を生成する。丸め誤差仮数生成部は、丸め前の仮数ｂ（Ｓ１７）から丸め後の仮数ｄ（Ｓ２２）の差の絶対値をとり、仮の丸め誤差を得る。この得られた仮の丸め誤差にたいして、正規化を行い仮数ｅ（Ｓ２５）を生成する。２のｎ乗を掛けて仮数ｅ（Ｓ２５）を正規化するので、このｎを指数調整値Ｓ２４とする。例えば、仮数ｂ（Ｓ１７）を
０１０００００００００００００００００００００００１１
仮数ｄ（Ｓ２２）を
０１００００００００００００００００００００００１００
とすると、丸め誤差は
００００００００００００００００００００００００００１
となり、これに２の２５乗を掛けると正規化された仮数ｅ（Ｓ２５）として
０１０００００００００００００００００００００００００
を得ることができる。この時、指数調整値は２５となる。丸め誤差指生成部は、指数ｂ（Ｓ１６）から指数調整値の差をとり、指数ｆ（Ｓ２８）を生成する。指数ｂ＜指数調整値の場合には、指数ｆ（Ｓ２８）を０として、指数調整値から指数ｂ（Ｓ１６）の差を仮数調整値Ｓ２６として生成する。例えば、指数ｂ（Ｓ１６）が１２７のとき、指数調整値が２５とすると、指数ｆ（Ｓ２８）は１０２となる。また、指数ｂ（Ｓ１６）が２０、指数調整値が２５のときは、指数ｂ＜指数調整値であるため、指数ｆ（Ｓ２８）を０とし、仮数調整値は５となる。丸め誤差仮数調整部では、指数ｂ＜指数調整値の場合、仮数を調整する必要があるため、仮数ｆ（Ｓ２９）を、仮数調整値だけ左にシフトさせ仮数ｆ（Ｓ２９）を生成する。指数ｂ≧指数調整値の場合は、仮数を調整する必要がないので仮数ｆ（Ｓ２９）は仮数ｅ（Ｓ２５）となる。丸め誤差浮動小数点数作成部では、符号ｆ（Ｓ２７）、指数ｆ（Ｓ２８）と仮数ｆ（Ｓ２９）をＩＥＥＥ７５４規格のフォーマットにエンコードし、浮動小数点数の丸め誤差Ｓ２２を作成する。例えば、仮数ｂ（Ｓ１７）を
０１０００００００００００００００００００００００１１
仮数ｄ（Ｓ２２）を
０１００００００００００００００００００００００１００
とすると、指数ｂ（Ｓ１６）が１２７のとき、仮数ｂ＜仮数なので符号ｆ（Ｓ２７）は０となる。仮数ｅ（Ｓ２５）は
０１０００００００００００００００００００００００００
で、指数調整値が２５のため、指数ｆ（Ｓ２８）は１０２となる。この時仮数調整値は０なので、仮数ｆ（Ｓ２９）は
０１０００００００００００００００００００００００００
となる。ＩＥＥＥ７５４フォーマットにエンコードすると
００１１００１１００００００００００００００００００００００００
つまり１６進数で３３００００００が丸め誤差として得られる。参考までに演算結果は、符号ｂ（Ｓ１５）が０とすると
００１１１１１１１００００００００００００００００００００００１、
つまり１６進数で３ｆ８００００１となる。この例ではガードビットを２ビットとしているが、第１実施例と同じく、ガードビットのビット数を多くとることにより丸め誤差の精度を高くすることができる。
【００２２】
［第３実施例］
図３は、本発明の第３実施例を示す数値演算プロセッサの丸め処理装置のブロック図である。
図において，２４はデータパック部である。
第３実施例が丸め誤差作成部１７を設ける点は，第１，第２実施例と同じであるが，丸め誤差記憶部１８として、制御レジスタ部５を利用する点で異なっている。
このような構成において，丸め誤差作成部１７により作成された丸め誤差Ｓ２３は、制御レジスタ部５に送られ、丸め誤差が制御レジスタ部に記憶される。ホストプロセッサは、制御レジスタ部の該当部分をリードすることで丸め誤差を得ることができる。
【００２３】
［第４実施例］
図４は、本発明の第４実施例を示す数値演算プロセッサの丸め処理装置のブロック図である。
第４実施例が丸め誤差作成部１７を設ける点は，第１，第２実施例と同じであるが，丸め誤差記憶部１８として、丸め部１０に浮動小数点数作成部１２と丸め誤差作成部１７の出力である丸め誤差Ｓ２３を一つのデータに連結するデータパック部２４を備え、このデータパック部２４の出力を記憶する丸め誤差記憶部１８として、データレジスタ部６を利用した点で異なっている。
このような構成において，丸め誤差作成部１７により作成された丸め誤差Ｓ２３は、データパック部で浮動小数点数作成部１２とまとめられ、内部データバスＳ４を通して、データレジスタ部６に転送され、演算結果と丸め誤差がペアで、データレジスタ部に記憶される。ホストプロセッサは、データレジスタ部の該当部分をリードすることで演算結果のみ、丸め誤差のみ、演算結果と丸め誤差をそれぞれ得ることができる。
【００２４】
【発明の効果】
以上述べたように、請求項１に記載の数値演算プロセッサの丸め処理装置によれば、丸め誤差と演算結果を比較することによって、丸め誤差の大きさと演算結果との大小関係を取得することができる。また、丸めにより本来は捨てられるハードウェアの演算精度を、丸め誤差として取得することができる。
【００２５】
請求項２に記載の数値演算プロセッサの丸め処理装置によれば、ＩＥＥＥ７５４規格のフォーマットで丸め誤差を生成させることにより、丸め誤差も浮動小数点数で統一して管理することができる。また、丸めにより、本来は捨てられるハードウェアの演算精度を、丸め誤差として取得することができる。そのため、ハードウェアの持つ演算精度をソフトウェアにも反映することができる。さらに、丸め誤差が演算を行っている浮動小数点数と同じフォーマットなので、演算にこの丸め誤差を利用することにより、非常に精度の高い演算を行うことができる。
【００２６】
請求項３に記載の数値演算プロセッサの丸め処理装置によれば、制御レジスタ部に丸め誤差を記憶させることにより、記憶回りの回路を簡略化することができる。
【００２７】
請求項４に記載の数値演算プロセッサの丸め処理装置によれば、演算結果と丸め誤差をペアで、データレジスタ部に記憶させることにより、演算値と演算の結果発生した丸め誤差をペアで扱えるため、演算結果と丸め誤差を、より詳細に管理することができる。
【図面の簡単な説明】
【図１】本発明の第１実施例を示す数値演算プロセッサの丸め処理装置のブロック図
【図２】本発明の第２実施例を示す数値演算プロセッサの丸め処理装置のブロック図
【図３】本発明の第３実施例を示す数値演算プロセッサの丸め処理装置のブロック図
【図４】本発明の第４実施例を示す数値演算プロセッサの丸め処理装置のブロック図
【図５】従来技術を示す数値演算プロセッサの丸め処理装置のブロック図
【図６】図５の演算部の詳細を示したブロック図
【図７】浮動小数点フォーマットを示す図
【図８】ガードビットを示す図
【符号の説明】
１  マイクロプロセッサ
２  メモリ
３  数値演算プロセッサ
４  制御部
５  制御レジスタ部
６  データレジスタ部
７  演算部
８  演算器
９  正規化部
１０  丸め部
１１  丸め計算部
１２  浮動小数点数作成部
１３  例外生成部
１４  非正規化数検出部
１５  指数生成部
１６  仮数生成部
１７  丸め誤差作成部
１８  丸め誤差記憶部
１９  丸め誤差符号生成部
２０  丸め誤差仮数生成部
２１  丸め誤差指数生成部
２２  丸め誤差仮数調整部
２３  丸め誤差浮動小数点数作成部
２４  データパック部
Ｓ１  データバス
Ｓ２  アドレスバス
Ｓ３  ストローブバス
Ｓ４  内部データバス
Ｓ５  内部アドレスバス
Ｓ６  内部ストローブバス
Ｓ７  制御レジスタ部ストローブバス
Ｓ８  データレジスタ部ストローブバス
Ｓ９  オペコード
Ｓ１０  丸めモード
Ｓ１１  例外
Ｓ１２  符号ａ
Ｓ１３  指数ａ
Ｓ１４  仮数ａ
Ｓ１５  符号ｂ
Ｓ１６  指数ｂ
Ｓ１７  仮数ｂ
Ｓ１８  指数ｃ
Ｓ１９  仮数ｃ
Ｓ２０  非正規化数発生信号
Ｓ２１  演算部ストローブバス
Ｓ２２  仮数ｄ
Ｓ２３  丸め誤差
Ｓ２４  指数調整値
Ｓ２５  仮数ｅ
Ｓ２６  仮数調整値
Ｓ２７  符号ｆ
Ｓ２８  指数ｆ
Ｓ２９  仮数ｆ
Ｎ１  浮動小数点数
Ｎ２  符号部
Ｎ３  指数部
Ｎ４  仮数部
Ｎ５  ガードビット
【図１】
2004252554.tif 000003
【図２】
2004252554.tif 000004
【図３】
2004252554.tif 000005
【図４】
2004252554.tif 000006
【図５】
2004252554.tif 000007
【図６】
2004252554.tif 000008
【図７】
2004252554.tif 000009
【図８】
2004252554.tif 000010