(57)【特許請求の範囲】
【請求項１】
第１仮数部、および、第１指数部により浮動小数点形式で表現される正数である第１被演算子と、
第２仮数部、および、第２指数部により浮動小数点形式で表現され、前記第１被演算子より小さい正数である第２被演算子と、
加算演算の指示と、
を受け付ける入力部と、
前記入力部に入力されたデータを記憶する記憶部と、
前記第１指数部と前記第２指数部との差分量を桁合わせのためのシフト数として計算し、そのシフト数分だけ前記第２仮数部を桁合わせしてから前記第１仮数部に加算した結果について所定のビット量より下位のビットを省略することによって前記演算結果を所定のビット量に収める演算部と、
前記演算部により省略された前記下位のビットのビット量を、ロストビット量として出力する出力部と、
を有し、
前記演算部は、前記シフト数が前記第１仮数部のビット量よりも２以上大きいときには、前記第１仮数部のビット量に１を加算した値を、前記ロストビット量とすることを特徴とする計算装置。
【請求項２】
第１仮数部、および、第１指数部により浮動小数点形式で表現される正数である第１被演算子と、
第２仮数部、および、第２指数部により浮動小数点形式で表現され、前記第１被演算子より小さい正数である第２被演算子と、
減算演算の指示と、
を受け付ける入力部と、
前記入力部に入力されたデータを記憶する記憶部と、
前記第１指数部と前記第２指数部との差分量を桁合わせのためのシフト数として計算し、そのシフト数分だけ前記第２仮数部を桁合わせしてから前記第１仮数部から減算した結果について所定のビット量より下位のビットを省略することによって前記演算結果を所定のビット量に収める演算部と、
前記演算部により省略された前記下位のビットのビット量を、ロストビット量として出力する出力部と、
を有し、
前記演算部は、前記シフト数が２未満であるときには、前記第１指数部の値と、前記第１被演算子から前記第２被演算子を減算した結果の指数部の値と、の差の値を、前記ロストビット量とすることを特徴とする計算装置。
【請求項３】
入力部、記憶部、演算部、および、出力部を有する計算装置による計算方法であって、
前記入力部が、
第１仮数部、および、第１指数部により浮動小数点形式で表現される正数である第１被演算子と、
第２仮数部、および、第２指数部により浮動小数点形式で表現され、前記第１被演算子より小さい正数である第２被演算子と、
加算演算の指示と、
を受け付ける手順と、
前記記憶部が、前記入力部に入力されたデータを記憶する手順と、
前記演算部が、
前記第１指数部と前記第２指数部との差分量を桁合わせのためのシフト数として計算し、そのシフト数分だけ前記第２仮数部を桁合わせしてから前記第１仮数部に加算した結果について所定のビット量より下位のビットを省略することによって前記演算結果を所定のビット量に収め、前記シフト数が前記第１仮数部のビット量よりも２以上大きいときには、前記第１仮数部のビット量に１を加算した値を、ロストビット量とする手順と、
前記出力部が、前記演算部により省略された前記下位のビットのビット量を、前記ロストビット量として出力する出力手順と、
を実行することを特徴とする計算方法。
【請求項４】
入力部、記憶部、演算部、および、出力部を有する計算装置による計算方法であって、
前記入力部が、
第１仮数部、および、第１指数部により浮動小数点形式で表現される正数である第１被演算子と、
第２仮数部、および、第２指数部により浮動小数点形式で表現され、前記第１被演算子より小さい正数である第２被演算子と、
減算演算の指示と、
を受け付ける手順と、
前記記憶部が、前記入力部に入力されたデータを記憶する手順と、
前記演算部が、
前記第１指数部と前記第２指数部との差分量を桁合わせのためのシフト数として計算し、そのシフト数分だけ前記第２仮数部を桁合わせしてから前記第１仮数部から減算した結果について所定のビット量より下位のビットを省略することによって前記演算結果を所定のビット量に収め、前記シフト数が２未満であるときには、前記第１指数部の値と、前記第１被演算子から前記第２被演算子を減算した結果の指数部の値と、の差の値を、ロストビット量とする手順と、
前記出力部が、前記演算部により省略された前記下位のビットのビット量を、前記ロストビット量として出力する出力手順と、
を実行することを特徴とする計算方法。
【請求項５】
請求項３または請求項４に記載の計算方法を、計算装置に実行させるための計算プログラム。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算装置、計算方法、および、計算プログラムに関する。
【背景技術】
【０００２】
一般に、コンピュータなどの演算装置において、加減算などの演算を行う場合、２進数で表現される数値について、所定の桁の切捨てや切上げなどを行うことで、数値の一部を省略してからメモリに格納する。情報を省略する要因は、無理数などの情報量の多い数値について、数値の一部がメモリに入りきらないためである。
【０００３】
また、コンピュータが実数を扱う方式として、固定小数点形式および浮動小数点形式が知られている。浮動小数点形式は、小数点の位置を任意に定義できるため、扱う数値の範囲が固定小数点形式よりも広い。そのため、浮動小数点形式で表現された数値同士の演算結果は、数値の取りうる範囲が広くなるため、情報量が多くなる。
【０００４】
なお、浮動小数点形式は、規格化されている。例えば、非特許文献１に示されるＩＥＥＥ（Institute of Electrical and Electronic Engineers）７５４では、単精度および倍精度について浮動小数点形式を規定している。単精度とは、１つの数値を３２ビット長（符号部が１ビット長、指数部が８ビット長、仮数部が２３ビット長）で表現するものであり、倍精度とは、１つの数値を６４ビット長（符号部が１ビット長、指数部が１１ビット長、仮数部が５２ビット長）で表現するものである。また、単精度および倍精度に対する拡張形式（拡張単精度形式および拡張倍精度形式）が演算に用いられる場合もある。
【０００５】
このように、ＩＥＥＥ７５４では浮動小数点形式が規定されているが、これらの規格に準拠している浮動小数点数を用いた演算では、演算結果の情報量がメモリに入りきらないなどの理由により、丸め、情報落ち、および、桁落ちなどの計算誤差が生じる。
【非特許文献１】IEEE Standard for binary Floating−Point Arithmetic、ANSI／IEEE Standard 754−1985.Institute of Electrical and Electronics Engineers, New York,1985.Reprinted in SIGPLAN Notices 22（2）,9-25,1987.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
高精度な浮動小数点数演算を実施する場合、どの浮動小数点数演算で計算誤差が生じたか否か、および、その計算誤差によってどれだけビット量が失われたか（以下、ロストビット量という）を把握することが重要である。例えば、８ビット長の２進数値「０１０１０００１」の下位３ビットを切り捨てることにより、５ビット長の２進数値「０１０１０」となる。このとき、ロストビット量は、３ビット長（８−５）となる。
【０００７】
なお、ロストビットが発生したか否かという情報、および、発生したときのロストビット量は、浮動小数点数演算の再計算をするか否かを判断するための有益な情報である。例えば、ロストビット量が多ければ、より精度の高い再計算を行うことにより、再計算前の演算結果の精度を大きく改善できる見込みがある。一方、ロストビット量が少なければ、より精度の高い再計算を行っても、演算結果について再計算前と再計算後とであまり変化がない。つまり、ロストビット量は、再計算のための指標である。
【０００８】
しかしながら、コンピュータなどの演算装置では、計算誤差が生じた場合、どの演算でどれだけロストビット量が発生したかという情報は得られない。その結果、効果の小さい再計算を行う、または、精度の高い演算結果を得られないといった問題が生じる。
【０００９】
そこで、本発明は、前記問題点に鑑みて発明されたものであり、どの演算でどれだけのロストビットが発生したかを算出することを目的とする。
【課題を解決するための手段】
【００１０】
前記課題を解決するために、本発明の計算装置は、
第１仮数部、および、第１指数部により浮動小数点形式で表現される正数である第１被演算子と、
第２仮数部、および、第２指数部により浮動小数点形式で表現され、前記第１被演算子より小さい正数である第２被演算子と、
加算演算の指示と、
を受け付ける入力部と、
前記入力部に入力されたデータを記憶する記憶部と、
前記第１指数部と前記第２指数部との差分量を桁合わせのためのシフト数として計算し、そのシフト数分だけ前記第２仮数部を桁合わせしてから前記第１仮数部に加算した結果について所定のビット量より下位のビットを省略することによって前記演算結果を所定のビット量に収める演算部と、
前記演算部により省略された前記下位のビットのビット量を、ロストビット量として出力する出力部と、
を有し、
前記演算部は、前記シフト数が前記第１仮数部のビット量よりも２以上大きいときには、前記第１仮数部のビット量に１を加算した値を、前記ロストビット量とすることを特徴とする。その他の手段は、後記する。
【発明の効果】
【００１１】
本発明によれば、どの浮動小数点数演算で、計算誤差によりどれだけのロストビットが生じたかを把握することが可能となる。その結果、効率的な浮動小数点数演算の再計算を支援できる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明に係るデータ処理装置（演算装置）について、適宜図面を参照しながら説明する。
【００１３】
まず、図１を参照しながら、データ処理装置の構成について説明する。データ処理装置１は、補助記憶装置１０１、メモリ（記憶部）１０２、処理部としてのＣＰＵ（Central Processing Unit）１０３、入力部１０４、出力部１０５および入出力インタフェース１０６を備えて構成される。
【００１４】
補助記憶装置１０１は、各種情報を記憶するものであり、例えば、ハードディスク、ＲＯＭ（Read Only Memory）などにより実現される。補助記憶装置１０１は、プログラム１１１、コンパイラ１１２および実行モジュール１１３を記憶している。
【００１５】
プログラム１１１は、図２で示すフローチャート上の処理が記述されているプログラム（以下、ソースプログラムという）である。コンパイラ１１２は、プログラム１１１をコンパイルおよびリンクするものである。実行モジュール１１３は、コンパイラ１１２によって、コンパイルおよびリンクされたモジュールである。
【００１６】
メモリ１０２は、各種情報を記憶する一時記憶手段であり、たとえばＲＡＭ（Random Access Memory）により実現される。ＣＰＵ１０３は、加減算などの各種演算処理を行うものであり、メモリ１０２、入出力インタフェース１０６を介して実行モジュール１１３を実行する役割を果たす。入力部１０４は、各種実行コマンドなどを入力する入力装置である。出力部１０５は、各種実行結果などを出力する出力装置である。入出力インタフェース１０６は、図１に示すように、各構成間の入出力を仲介する。
【００１７】
前記のように構成されるデータ処理装置１は、次のように動作する。まず、操作者により、入力部１０４から入力されたコンパイルコマンドは、入出力インタフェース１０６を介して、メモリ１０２にストアされる。メモリ１０２では、補助記憶装置１０１のプログラム１１１が、コンパイラ１１２によってコンパイルおよびリンクされ、機械語コードである実行モジュール１１３が生成される。
【００１８】
次に、操作者により、入力部１０４から実行コマンドが入力されると、ＣＰＵ１０３がメモリ１０２に実行モジュール１１３をロードする。実行モジュール１１３がメモリ１０２にロードされると、ＣＰＵ１０３によって、図２または図７に示すフローチャート上の各処理がメモリ１０２からＣＰＵ１０３に逐次呼び出され、各処理が実行された後、その実行結果がメモリ１０２にストアされる。メモリ１０２にストアされた実行結果は、ＣＰＵ１０３によって、入出力インタフェース１０６を介して、出力部１０５に出力される。
【００１９】
続いて、図２を参照しながら、データ処理装置のロストビット量算出処理について説明する（適宜図１参照）。図２は、データ処理装置のロストビット量算出処理を示したフローチャートである。以下、被演算子（オペランド）である第１浮動小数点数（第１被演算子）および第２浮動小数点数（第２被演算子）は、ＩＥＥＥ７５４に準拠した正規化された浮動小数点数とし、符号部（Ｓ）が１ビット長、指数部（Ｅ）が１５ビット長、仮数部（Ｍ）がｎビット長で表現される場合（（−１）＊＊Ｓ＊（１．Ｍ）＊２＊＊Ｅ）を例として説明する。ここで、Ｓは符号を表し、０の場合、正の浮動小数点数を、１の場合、負の浮動小数点数を示す。Ｅは、ｅ１ｅ２…ｅ１５（ｅｉ∈（０，１））、ｉ＝１，…，１５を表す。Ｍは、ｍ１ｍ２…ｍｎ（ｍｉ∈（０，１））、ｉ＝１，…，ｎを表す。
【００２０】
なお、本実施形態において、「Ａ＊Ｂ」はＡとＢとの乗算を示し、「Ａ＊＊Ｂ」はＡのＢ乗を示し、「（１．Ａ）」は整数部が１で小数部がＡである実数を示す。また、特に但し書きのないときには、数値は１０進数で表現する。
【００２１】
初めに入力処理Ｓ２０１を実現するための実行モジュール１１３が、メモリ１０２からＣＰＵ１０３に呼び出される。この入力処理Ｓ２０１では、図３に示すように、Ｓ３０１において、操作者により入力部１０４から入力されたデータＡＩ、ＢＩおよびフラグｒをメモリ１０２にロードさせる。なお、データＡＩ、ＢＩは、第１，第２被演算子であり、フラグｒは、加算や減算などの演算子の識別情報である。ここで、ロストビット量を得たい浮動小数点数演算が加算であれば、ｒに０が、減算であれば、ｒに１が、操作者により入力部１０４から入力される。
【００２２】
入力処理Ｓ２０１が終了すると、ロストビット量算出処理Ｓ２０２を実現するための実行モジュール１１３が、メモリ１０２からＣＰＵ１０３に呼び出される。図５は、図２に示したロストビット量算出処理Ｓ２０２の詳細図である。
【００２３】
このＳ２０２では、図５に示すように、まず、Ｓ５０１において、「ＡＩ＝０」、「ＢＩ＝０」、「ＡＩ＝ＢＩ」という３つの条件のうち、いずれか１つを満たす場合、ロストビットは生じないため、Ｓ５０２において、ＬＢに０を代入する。なお、ＬＢはロストビットに関する変数であり、ＬＢの符号（正負）が計算誤差の種別を、ＬＢの絶対値が計算誤差のロストビット量を示す。計算誤差の種別は、正が桁落ちに、負が丸め誤差に対応する。また、ＬＢが０のときには、計算誤差は発生していない。
【００２４】
ＡＩ＝０またはＢＩ＝０またはＡＩ＝ＢＩではない場合、Ｓ５０３に進む。Ｓ５０３では、ＡＩおよびＢＩを正規化された２進数で表現し、ＡＩおよびＢＩの符号部の値を変数Ｔ１、Ｔ２にそれぞれ代入する。
ＡＩ＝（−１）＊＊Ｔ１＊（１．Ｆ１）＊２＊＊Ｄ１
ＢＩ＝（−１）＊＊Ｔ２＊（１．Ｆ２）＊２＊＊Ｄ２
【００２５】
Ｓ５０３が実行されると、Ｓ５０４において、ＡＩとＢＩの符号が異なるかどうかを調査するため、（Ｔ１＋Ｔ２）／２の余りを変数Ｑに代入する。ここで、ＡＩとＢＩが異符号である場合、Ｑには１が代入される。ＡＩとＢＩが同符号である場合、Ｑには０が代入される。
【００２６】
Ｓ５０４が実行されると、共通処理Ｓ５０５において、被演算子である第１浮動小数点数ＡＪと第２浮動小数点数ＢＪが、ＡＪ＞ＢＪ＞０の条件で、演算を実行されるようにする。図６は、図５に示した共通処理Ｓ５０５の詳細図である。
【００２７】
このＳ５０５では、図６に示すように、まず、Ｓ６０１において、ＡＩ＞ＢＩ＞０の場合を条件分岐する。ＡＩ＞ＢＩ＞０である場合、Ｓ６０２において、ＡＩおよびＢＩをそれぞれ、変数ＡＪおよびＢＪに代入する。ＡＩ＞ＢＩ＞０でない場合、Ｓ６０３に進む。
【００２８】
Ｓ６０３では、ＢＩ＞ＡＩ＞０の場合を条件分岐する。ＢＩ＞ＡＩ＞０である場合、Ｓ６０４において、ＡＩおよびＢＩをそれぞれ、変数ＢＪおよびＡＪに代入する。ＢＩ＞ＡＩ＞０でない場合、Ｓ６０５に進む。
【００２９】
Ｓ６０５では、ＡＩ＞０かつＢＩ＜０かつ|ＡＩ|＞|ＢＩ|の場合を条件分岐する。ここで、|ＡＩ|および|ＢＩ|はＡＩおよびＢＩの絶対値である。ＡＩ＞０かつＢＩ＜０かつ|ＡＩ|＞|ＢＩ|である場合、Ｓ６０６において、ＡＩおよび−ＢＩをそれぞれ、変数ＡＪおよびＢＪに代入する。ＡＩ＞０かつＢＩ＜０かつ|ＡＩ|＞|ＢＩ|でない場合、Ｓ６０７に進む。
【００３０】
Ｓ６０７では、ＡＩ＞０かつＢＩ＜０かつ|ＡＩ|＜|ＢＩ|の場合を条件分岐する。ＡＩ＞０かつＢＩ＜０かつ|ＡＩ|＜|ＢＩ|である場合、Ｓ６０８において、ＡＩおよび−ＢＩをそれぞれ、変数ＢＪおよびＡＪに代入する。ＡＩ＞０かつＢＩ＜０かつ|ＡＩ|＜|ＢＩ|でない場合、Ｓ６０９に進む。
【００３１】
Ｓ６０９では、ＡＩ＜０かつＢＩ＞０かつ|ＡＩ|＞|ＢＩ|の場合を条件分岐する。ＡＩ＜０かつＢＩ＞０かつ|ＡＩ|＞|ＢＩ|である場合、Ｓ６１０において、−ＡＩおよびＢＩをそれぞれ、変数ＡＪおよびＢＪに代入する。ＡＩ＜０かつＢＩ＞０かつ|ＡＩ|＞|ＢＩ|でない場合、Ｓ６１１に進む。
【００３２】
Ｓ６１１では、ＡＩ＜０かつＢＩ＞０かつ|ＡＩ|＜|ＢＩ|の場合を条件分岐する。ＡＩ＜０かつＢＩ＞０かつ|ＡＩ|＜|ＢＩ|である場合、Ｓ６１２において、−ＡＩおよびＢＩをそれぞれ、変数ＢＪおよびＡＪに代入する。ＡＩ＜０かつＢＩ＞０かつ|ＡＩ|＜|ＢＩ|でない場合、Ｓ６１３に進む。
【００３３】
Ｓ６１３では、ＡＩ＜０かつＢＩ＜０かつ|ＡＩ|＞|ＢＩ|の場合を条件分岐する。ＡＩ＜０かつＢＩ＜０かつ|ＡＩ|＞|ＢＩ|である場合、Ｓ６１４において、−ＡＩおよび−ＢＩをそれぞれ、変数ＡＪおよびＢＪに代入する。ＡＩ＜０かつＢＩ＜０かつ|ＡＩ|＞|ＢＩ|でない場合、Ｓ６１５に進む。
【００３４】
Ｓ６１５は、ＡＩ＜０かつＢＩ＜０かつ|ＡＩ|＜|ＢＩ|の場合に該当し、−ＡＩおよび−ＢＩをそれぞれ、変数ＢＪおよびＡＪに代入する。
【００３５】
Ｓ５０５が実行されると、Ｓ５０６において、ＡＪおよびＢＪを正規化された２進数で表現し、ＡＪおよびＢＪの絶対値を変数ＡおよびＢに代入する。
ＡＪ＝（−１）＊＊Ｓ１＊（１．Ｍ１）＊２＊＊Ｅ１
ＢＪ＝（−１）＊＊Ｓ２＊（１．Ｍ２）＊２＊＊Ｅ２
Ｍ１＝ｆ１ｆ２…ｆｍ（ｆｉ∈（０，１）），ｉ＝１，…，ｍ
Ｍ２＝ｇ１ｇ２…ｇｍ（ｂｉ∈（０，１）），ｉ＝１，…，ｍ
Ｅ１＝ａ１ａ２…ａ１５（ａｉ∈（０，１）），ｉ＝１，…，１５
Ｅ２＝ｂ１ｂ２…ｂ１５（ｂｉ∈（０，１）），ｉ＝１，…，１５
Ａ＝（１．Ｍ１）＊２＊＊Ｅ１
Ｂ＝（１．Ｍ２）＊２＊＊Ｅ２
【００３６】
Ｓ５０６が実行されると、Ｓ５０７において、演算を実施するために、桁合わせのためのシフト数Ｐ＝Ｅ１−Ｅ２を算出する。ここで、Ｐはシフト数を格納するための変数である。
【００３７】
Ｓ５０７が実行されると、加算処理Ｓ５１０または減算処理Ｓ５１１のどちらを実行すればよいかを判定するために、Ｓ５０８において、ＡＩとＢＩが同符号であるか、異符号であるかを条件分岐する。Ｑが０、すなわち、ＡＩとＢＩが同符号である場合は、Ｓ５０９に進む。Ｑが１、すなわち、ＡＩとＢＩが異符号である場合は、Ｓ５１２に進む。
【００３８】
Ｓ５０９では、ロストビット量を得たい浮動小数点数演算が加算であるか、減算であるか判定するために、Ｓ３０１で入力されたフラグｒが０であるか１であるかを条件分岐する。ｒが０であれば、加算処理Ｓ５１０を実行する。ｒが１であれば、減算処理Ｓ５１１を実行する。これは、ＡＩとＢＩが同符号のため、操作者により指定された演算をそのまま実行するためである。
【００３９】
Ｓ５１２では、ロストビット量を得たい浮動小数点数演算が加算であるか、減算であるか判定するために、ｒが０であるか１であるかを条件分岐する。ｒが０であれば、減算処理Ｓ５１１を実行する。ｒが１であれば、加算処理Ｓ５１０を実行する。これは、ＡＩとＢＩが異符号のため、Ａ＋（−Ｂ）をＡ−Ｂとするなど、操作者により指定された演算をひっくり返して実行するためである。
【００４０】
加算処理Ｓ５１０、減算処理Ｓ５１１のどちらを実行すればよいかが決定されると、加算処理Ｓ５１０か減算処理Ｓ５１１のどちらか一方が、メモリ１０２からＣＰＵ１０３に呼び出される。まずは、加算処理Ｓ５１０から説明する。図７は、図５に示した加算処理Ｓ５１０の詳細図である。
【００４１】
このＳ５１０では、図７に示すように、まず、Ｓ７０１において、（１．Ｍ１）＊２＊＊（ｍ＋１）を変数ＩＡに代入する。これにより、浮動小数点数ＡＪを正整数で表現することが可能となる。Ｓ７０１が実行されると、Ｓ７０２において、（１．Ｍ２）＊２＊＊（ｍ＋１）に対して、Ｐビット右シフトした結果を変数ＩＢに代入する。これにより、浮動小数点数ＡＪと桁合わせ後の浮動小数点数ＢＪを正整数で表現することが可能となる。
【００４２】
Ｓ７０２が実行されると、Ｓ７０３において、ロストビット量が０の場合を条件分岐する。Ｅ１＝Ｅ２（Ｐ＝０）の場合、ロストビット量は０であるため、Ｓ７０４において、ＬＢに０を代入する。Ｐ＝０でない場合はＳ７０５に進む。
【００４３】
Ｓ７０５において、ロストビット量がｍ＋１の場合を条件分岐する。Ｐ＞＝ｍ＋２の場合、ロストビット量はｍ＋１であるため、Ｓ７０６において、ＬＢにｍ＋１を代入する。Ｐ＞＝ｍ＋２ではない場合はＳ７０７に進む。
【００４４】
Ｓ７０７において、ロストビット量がＰの場合とＰ−１の場合を条件分岐する。ＩＡ＋ＩＢ＞＝２＊＊（ｍ＋２）の場合、桁上がりが生じるため、ロストビット量が１増加し、ロストビット量はＰになる。そのため、Ｓ７０８において、ＬＢにＰを代入する。ＩＡ＋ＩＢ＜２＊＊（ｍ＋２）の場合、ロストビット量はＰ−１であるため、Ｓ７０９において、ＬＢにＰ−１を代入する。これにより、加算処理の場合のロストビット量を得ることが可能となる。
【００４５】
次に、減算処理Ｓ５１１を説明する。図８は、減算処理Ｓ５１１の詳細図である。
【００４６】
このＳ５１１では、図８に示すように、まず、Ｓ８０１において、（１．Ｍ１）＊２＊＊（ｍ＋２）を変数ＩＡに代入する。これにより、浮動小数点数ＡＪを正整数で表現することが可能となる。
【００４７】
Ｓ８０１が実行されると、Ｓ８０２において、（１．Ｍ２）＊２＊＊（ｍ＋２）に対して、Ｐビット右シフトした結果を変数ＩＢに代入する。これにより、浮動小数点数ＡＪと桁合わせ後の浮動小数点数ＢＪを正整数で表現することが可能となる。
【００４８】
Ｓ８０２が実行されると、Ｓ８０３において、ロストビット量が０の場合とｍ＋２−ｋの場合を条件分岐する。Ｐ＞＝２の場合、ロストビット量は０であるため、Ｓ８０４において、ＬＢに０を代入する。Ｐ＜２の場合、ロストビット量はＡとＡ−Ｂの指数部の差となるため、まず、Ｓ８０５において、２＊＊ｋ＜＝ＩＡ−ＩＢ＜２＊＊（ｋ＋１）を満たす整数ｋを求め、Ｓ８０６において、ＬＢにｍ＋２−ｋを代入する。これにより、減算処理の場合のロストビット量を得ることが可能となる。
【００４９】
最後に、出力処理Ｓ２０３（図２参照）が、メモリ１０２からＣＰＵ１０３に呼び出される。この出力処理Ｓ２０３では、図４に示すように、Ｓ４０１において、ＬＢの値を算出結果として出力部１０５に出力する。
【００５０】
このように、Ｓ２０１〜Ｓ２０３（図２参照）の各処理を行うことで、演算のロストビット量を得ることが可能となる。
【００５１】
また、ロストビット量を得ることにより、高精度な浮動小数点演算を必要とする産業（例えば、ニューラルネットワーク、敏感な数値シミュレーションを必要とする物理学分野）に本発明を応用することができる。
【００５２】
続いて、ロストビット量算出の具体例について説明する（適宜各図参照）。ここでは、演算式「ＡＩ＋ＢＩ」におけるロストビット量算出処理を例にとり説明する。また、データ処理装置１（図１参照）が各演算で使用する浮動小数点数については、符号部が１ビット長、指数部が１５ビット長、仮数部が２４０ビット長とする。
【００５３】
前記条件のもとで、第１被演算子と第２被演算子に対応する浮動小数点数ＡＩ、ＢＩを次のように設定する。
ａ＝７７６１７．０
ｂ＝３３０９６．０
ＡＩ＝３３３．７５＊ｂ＊＊６＋ａ＊＊２＊（１１．０＊ａ＊＊２＊ｂ＊＊２−ｂ＊＊６−１２１．０＊ｂ＊＊４−２．０）
ＢＩ＝５．５＊ｂ＊＊８
【００５４】
まず、入力処理Ｓ２０１により、Ｓ３０１のように、入力部１０４からデータを入力する。その結果、ＡＩ、ＢＩが以下のように初期化される。
ＡＩ＝−７９１７１１１３４０６６８９６１３６１１０１１３４７０１５２４９４２８５０．０
ＢＩ＝＋７９１７１１１３４０６６８９６１３６１１０１１３４７０１５２４９４２８４８．０
【００５５】
また、ロストビット量を得たい浮動小数点数演算が加算であるため、ｒに０が入力部１０４から入力される。入力処理Ｓ２０１が実行されると、ロストビット量算出処理Ｓ２０２が実行される。まず、Ｓ５０１において、ＡＩ≠０、ＢＩ≠０、ＡＩ≠ＢＩであるため、Ｓ５０３に進む。Ｓ５０３により、Ｔ１＝１，Ｔ２＝０になる。
【００５６】
Ｓ５０３が実行されると、Ｓ５０４により、Ｑ＝１になる。
【００５７】
Ｓ５０４が実行されると、共通処理Ｓ５０５が実行される。まず、Ｓ６０１において、ＡＩ＞ＢＩ＞０でないため、Ｓ６０３に進む。Ｓ６０３において、ＢＩ＞ＡＩ＞０でないため、Ｓ６０５に進む。Ｓ６０５において、ＡＩ＞０かつＢＩ＜０かつ|ＡＩ|＞|ＢＩ|ではないため、Ｓ６０７に進む。Ｓ６０７により、ＡＩ＞０かつＢＩ＜０かつ|ＡＩ|＜|ＢＩ|ではないため、Ｓ６０９に進む。Ｓ６０９において、ＡＩ＜０かつＢＩ＞０かつ|ＡＩ|＞|ＢＩ|であるため、Ｓ６１２に進む。Ｓ６１２により、ＡＪ、ＢＪは以下のようになる（ＡＪ＞ＢＪ）。
ＡＪ＝７９１７１１１３４０６６８９６１３６１１０１１３４７０１５２４９４２８５０．０
ＢＪ＝７９１７１１１３４０６６８９６１３６１１０１１３４７０１５２４９４２８４８．０
【００５８】
Ｓ５０５が実行されると、Ｓ５０６により、ＡＪ、ＢＪは以下のように表現される。
ＡＪ＝（−１）＊＊Ｓ１＊（１．Ｍ１）＊２＊＊Ｅ１
ＢＪ＝（−１）＊＊Ｓ２＊（１．Ｍ２）＊２＊＊Ｅ２
Ｓ１…第１符号部
Ｓ２…第２符号部
Ｍ１…第１仮数部
Ｍ２…第２仮数部
Ｅ１…第１指数部
Ｅ２…第２指数部
【００５９】
ここで、Ｓ１＝０、Ｓ２＝０、Ｅ１＝１２２、Ｅ２＝１２２であり、Ｍ１、Ｍ２、は２進数でそれぞれ以下の表１の通りである。なお、表による２進数表現において、データを８ビットごとに区切っている。データは、左上のセルの最も左の値が最上位ビットとなり、左上のセルの右のセル、その右のセル、…、右上のセル、左上のセルの下のセル、…、左下のセルの順に上位ビットから下位ビットのデータが格納される。
【表１】
0004490925.tif 000002
【００６０】
Ｓ５０６が実行されると、Ｓ５０７により、Ｐ＝０になる。
【００６１】
Ｓ５０７が実行されると、Ｓ５０８が実行される。Ｓ５０８において、Ｑ＝１であるため、Ｓ５１２に進む。Ｓ５１２により、ｒ＝０であるため、減算処理Ｓ５１１が実行される。
【００６２】
Ｓ５１１では、まず、Ｓ８０１により、変数ＩＡは以下のようになる。Ｓ８０１が実行されると、Ｓ８０２により、変数ＩＢは以下の表２のようになる。
【表２】
0004490925.tif 000003
【００６３】
Ｓ８０２が実行されると、Ｓ８０３において、Ｐ＝０より、Ｓ８０５に進む。
【００６４】
Ｓ８０５において、ＩＡ−ＩＢは２＊＊１２１であるため、ｋ＝１２１となる。Ｓ８０６により、変数ＬＢは１２１になる。従って、前記条件では、桁落ちにより１２１ビット長のロストビット量が生じることがわかる。
【表３】
0004490925.tif 000004
【００６５】
以上で実施形態の説明を終えるが、本発明の態様はこれらに限定されるものではない。ハードウェア構成や処理手順などの具体的な構成について、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。例えば、本実施形態の処理手順を実現するための構成として、実行モジュール１１３というソフトウェアを用いる代わりに、ＣＰＵに追加された新たな命令セットや、ＡＳＩＣ（Application Specific Integrated Circuit）などのハードウェアにより実現してもよい。
【図面の簡単な説明】
【００６６】
【図１】本発明の一実施形態に関するデータ処理装置を示す構成図である。
【図２】本発明の一実施形態に関するデータ処理装置のロストビット量算出処理を示すフローチャートである。
【図３】本発明の一実施形態に関する入力処理（Ｓ２０１）の詳細を示すフローチャートである。
【図４】本発明の一実施形態に関する出力処理（Ｓ２０３）の詳細を示すフローチャートである。
【図５】本発明の一実施形態に関するロストビット量算出処理（Ｓ２０２）の詳細を示すフローチャートである。
【図６】本発明の一実施形態に関する共通処理（Ｓ５０５）の詳細を示すフローチャートである。
【図７】本発明の一実施形態に関する加算処理（Ｓ５１０）の詳細を示すフローチャートである。
【図８】本発明の一実施形態に関する減算処理（Ｓ５１１）の詳細を示すフローチャートである。
【符号の説明】
【００６７】
１０１  補助記憶部
１０２  メモリ
１０３  ＣＰＵ
１０４  入力部
１０５  出力部
１１１  プログラム
１１２  コンパイラ
１１３  実行モジュール
【図１】
0004490925.tif 000005
【図２】
0004490925.tif 000006
【図３】
0004490925.tif 000007
【図４】
0004490925.tif 000008
【図５】
0004490925.tif 000009
【図６】
0004490925.tif 000010
【図７】
0004490925.tif 000011
【図８】
0004490925.tif 000012