(57)【要約】【課題】浮動小数点演算により精度の高い演算結果を得ることができる浮動小数点演算装置を提供すること。【解決手段】入力値の指数部に基づき、指数の異なる複数の値がそれぞれ格納される複数のバッファから、前記入力値に対応するバッファを選択する選択部により選択されたバッファに格納されている値と前記入力値とに基づき加減演算した結果を前記バッファに書き込む加減演算部と、複数の入力値に基づく加減演算の出力値を決定する出力決定部と、前記入力値を格納するバッファが用意されていないと判定した場合、前記入力値に対応するバッファを追加するバッファ管理部とを備え、前記加減演算部は、前記加減演算した結果の有効桁数が前記選択部により選択されたバッファの有効桁数を超える場合、前記加減演算した結果の一部を繰り上げ又は繰り下げて、複数のバッファに格納される値に分割する。【選択図】図７
2015232833.tif 000002
【特許請求の範囲】
【請求項１】
入力値の指数部に基づき、指数の異なる複数の値がそれぞれ格納される複数のバッファから、前記入力値に対応するバッファを選択する選択部と、
前記選択部により選択されたバッファに格納されている値と前記入力値とに基づき加減演算した結果を前記選択部により選択されたバッファに書き込む加減演算部と、
前記バッファに格納された値に基づき、複数の入力値に基づく加減演算の出力値を決定する出力決定部と、
前記入力値の指数部に基づき、前記入力値を格納するバッファが用意されていないと判定した場合、前記入力値に対応するバッファを追加するバッファ管理部とを備え、
前記加減演算部は、
前記加減演算した結果の有効桁数が前記選択部により選択されたバッファの有効桁数を超える場合、前記加減演算した結果の一部を繰り上げ又は繰り下げて、複数のバッファに格納される値に分割する浮動小数点演算装置。
【請求項２】
前記バッファ管理部は、
前記入力値の有効桁数が前記バッファの有効桁数を超える場合、前記入力値を、複数のバッファに格納される値に分割する請求項１に記載の浮動小数点演算装置。
【請求項３】
前記バッファ管理部は、
前記バッファのメモリ残量に応じて、追加するバッファサイズを変更する請求項２に記載の浮動小数点演算装置。
【請求項４】
前記選択部と、前記加減演算部と、前記出力決定部とを備える演算部を複数備え、
前記複数の演算部からの出力値に基づき、１つの演算結果を求める全体処理部をさらに備える請求項１から３のいずれか一項に記載の浮動小数点演算装置。
【請求項５】
前記全体処理部は、
前記複数の演算部のそれぞれにおける前記バッファの指数に基づき、前記演算部から取得する前記出力値の指数を決定し、
前記演算部は、
前記全体処理部により決定された指数の出力値を抽出し、前記全体処理部に出力する請求項４に記載の浮動小数点演算装置。
【請求項６】
コンピュータを、
入力値の指数部に基づき、指数の異なる複数の値がそれぞれ格納される複数のバッファから、前記入力値に対応するバッファを選択する選択手段、
前記選択手段により選択されたバッファに格納されている値と前記入力値とに基づき加減演算した結果を前記選択手段により選択されたバッファに書き込み、前記加減演算した結果の有効桁数が前記選択手段により選択されたバッファの有効桁数を超える場合、前記加減演算した結果の一部を繰り上げ又は繰り下げて、複数のバッファに格納される値に分割する加減演算手段、
前記バッファに格納された値に基づき、複数の入力値に基づく加減演算の出力値を決定する出力決定手段、
前記入力値の指数部に基づき、前記入力値を格納するバッファが用意されているか否かを判定し、前記入力値を格納するバッファが用意されていないと判定した場合、前記入力値に対応するバッファを追加するバッファ管理手段、
として機能させるためのプログラム。
【請求項７】
物体周りを流れる流体のパラメータを計算単位ごとに算出するパラメータ算出部と、
前記パラメータ算出部が算出した前記流体のパラメータに基づき、前記物体に作用する空気抵抗値を算出する空気抵抗値演算部と、
前記パラメータ算出部により算出された複数の前記流体のパラメータ、及び、前記空気抵抗値演算部が算出した複数の前記空気抵抗値のうち少なくともいずれか一方を、時間方向に加減演算する時間方向加減演算部とを備え、
前記時間方向加減演算部は、
入力値として、前記流体のパラメータ、又は、前記空気抵抗値を入力し、
前記入力値の指数部に基づき、指数の異なる複数の値がそれぞれ格納される複数のバッファから、前記入力値に対応するバッファを選択する選択部と、
前記選択部により選択されたバッファに格納されている値と前記入力値とに基づき加減演算した結果を前記選択部により選択されたバッファに書き込む加減演算部と、
前記バッファに格納された値に基づき、複数の入力値に基づく加減演算の出力値を決定する出力決定部と、
前記入力値の指数部に基づき、前記入力値を格納するバッファが用意されているか否かを判定し、前記入力値を格納するバッファが用意されていないと判定した場合、前記入力値に対応するバッファを追加するバッファ管理部とを備え、
前記加減演算部は、
前記加減演算した結果の有効桁数が前記選択部により選択されたバッファの有効桁数を超える場合、前記加減演算した結果の一部を繰り上げ又は繰り下げて、複数のバッファに格納される値に分割する演算装置。
【請求項８】
前記空気抵抗値演算部が算出した前記空気抵抗値の時間方向の変化量が収束したか否かを判定する収束判定部をさらに備え、
前記時間方向加減演算部は、
前記収束判定部により前記空気抵抗値の時間方向の変化量が収束していると判定されたとき以降に得られた値に基づき加減演算をする請求項７に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点演算装置、プログラム、及び演算装置に関する。
【背景技術】
【０００２】
数値流体力学（以下、ＣＦＤ：Computational Fluid Dynamicsという）による解析処理では、物理的現象を再現するシミュレーション等が行われる。このシミュレーションの一工程では、コンピュータを用いて浮動小数点演算が行われる場合がある。しかしながら、浮動小数点演算の途中において、極めて小さい値に関する一部の情報が欠落することにより、演算結果に誤差が生じることが知られている。このような情報落ちを防ぐため、例えば、絶対値の大きさの順で演算を行うことにより、加算時の桁落ちをできるだけ少なくし、精度の高い数値積分を行うものが知られている（例えば、特許文献１参照）。また、情報落ちが生じた演算結果を正規化するものが知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−１８１６４５号公報
【特許文献２】特開平６−５９８５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、計算処理対象の数値が大量で順次出力される入力値に基づき演算処理を行う場合、入力値の昇順を並び替えて計算することは困難であった。このため、上述の情報落ちを防ぐ技術を提供することが難しく、浮動小数点演算による演算結果の精度を改善できない問題があった。
本発明は、このような事情を考慮してなされたものであり、浮動小数点演算により精度の高い演算結果を得ることができる浮動小数点演算装置、プログラム、及び演算装置を提供することを目的の一つとする。
【課題を解決するための手段】
【０００５】
請求項１記載の発明は、入力値の指数部に基づき、指数の異なる複数の値がそれぞれ格納される複数のバッファから、前記入力値に対応するバッファを選択する選択部（１０４）と、前記選択部により選択されたバッファに格納されている値と前記入力値とに基づき加減演算した結果を前記選択部により選択されたバッファに書き込む加減演算部（１０５）と、前記バッファに格納された値に基づき、複数の入力値に基づく加減演算の出力値を決定する出力決定部（１０６）と、前記入力値の指数部に基づき、前記入力値を格納するバッファが用意されていないと判定した場合、前記入力値に対応するバッファを追加するバッファ管理部（１０３）とを備え、を備え前記加減演算部は、前記加減演算した結果の有効桁数が前記選択部により選択されたバッファの有効桁数を超える場合、前記加減演算した結果の一部を繰り上げ又は繰り下げて、複数のバッファに格納される値に分割する浮動小数点演算装置である。
【０００６】
請求項２記載の発明は、前記バッファ管理部が、前記入力値の有効桁数が前記バッファの有効桁数を超える場合、前記入力値を、複数のバッファに格納される値に分割する請求項１に記載の浮動小数点演算装置である。
【０００７】
請求項３記載の発明は、前記バッファ管理部が、前記バッファのメモリ残量に応じて、追加するバッファサイズを変更する請求項２に記載の浮動小数点演算装置である。
【０００８】
請求項４記載の発明は、前記選択部と、前記加減演算部と、前記出力決定部とを備える演算部を複数備え、前記複数の演算部からの出力値に基づき、１つの演算結果を求める全体処理部をさらに備える請求項１から３のいずれか一項に記載の浮動小数点演算装置である。
【０００９】
請求項５記載の発明は、前記全体処理部が、前記複数の演算部のそれぞれにおける前記バッファの指数に基づき、前記演算部から取得する前記出力値の指数を決定し、前記演算部は、前記全体処理部により決定された指数の出力値を抽出し、前記全体処理部に出力する請求項４に記載の浮動小数点演算装置である。
【００１０】
請求項６記載の発明は、コンピュータを、入力値の指数部に基づき、指数の異なる複数の値がそれぞれ格納される複数のバッファから、前記入力値に対応するバッファを選択する選択手段、前記選択手段により選択されたバッファに格納されている値と前記入力値とに基づき加減演算した結果を前記選択手段により選択されたバッファに書き込み、前記加減演算した結果の有効桁数が前記選択部により選択されたバッファの有効桁数を超える場合、前記加減演算した結果の一部を繰り上げ又は繰り下げて、複数のバッファに格納される値に分割する加減演算手段、前記バッファに格納された値に基づき、複数の入力値に基づく加減演算の出力値を決定する出力決定手段、前記入力値の指数部に基づき、前記入力値を格納するバッファが用意されているか否かを判定し、前記入力値を格納するバッファが用意されていないと判定した場合、前記入力値に対応するバッファを追加するバッファ管理手段、として機能させるためのプログラムである。
【００１１】
請求項７記載の発明は、物体周りを流れる流体のパラメータを計算単位ごとに算出するパラメータ算出部（３）と、前記パラメータ算出部が算出した前記流体のパラメータに基づき、前記物体に作用する空気抵抗値を算出する空気抵抗値演算部（５）と、前記パラメータ算出部により算出された複数の前記流体のパラメータ、及び、前記空気抵抗値演算部が算出した複数の前記空気抵抗値のうち少なくともいずれか一方を、時間方向に加減演算する時間方向加減演算部（４）とを備え、前記時間方向加減演算部は、入力値として、前記流体のパラメータ、又は、前記空気抵抗値を入力し、前記入力値の指数部に基づき、指数の異なる複数の値がそれぞれ格納される複数のバッファから、前記入力値に対応するバッファを選択する選択部と、前記選択部により選択されたバッファに格納されている値と前記入力値とに基づき加減演算した結果を前記選択部により選択されたバッファに書き込む加減演算部と、前記バッファに格納された値に基づき、複数の入力値に基づく加減演算の出力値を決定する出力決定部と、前記入力値の指数部に基づき、前記入力値を格納するバッファが用意されているか否かを判定し、前記入力値を格納するバッファが用意されていないと判定した場合、前記入力値に対応するバッファを追加するバッファ管理部とを備え、前記加減演算部は、前記加減演算した結果の有効桁数が前記選択部により選択されたバッファの有効桁数を超える場合、前記加減演算した結果の一部を繰り上げ又は繰り下げて、複数のバッファに格納される値に分割する演算装置である。
【００１２】
請求項８記載の発明は、前記空気抵抗値演算部が算出した前記空気抵抗値の時間方向の変化量が収束したか否かを判定する収束判定部（６）をさらに備え、前記時間方向加減演算部は、前記収束判定部により前記空気抵抗値の時間方向の変化量が収束していると判定されたとき以降に得られた値に基づき加減演算をする請求項７に記載の演算装置である。
【発明の効果】
【００１３】
請求項１，４の発明によれば、演算部１００がそれぞれ異なる設定指数に対応するバッファ領域毎に入力値の加減算結果を記憶しておき、最終的な演算結果を得ることにより、誤差として削除され得る小さい値も、演算結果として得ることができる。よって、浮動小数点演算により精度の高い演算結果を得ることができる。
【００１４】
また、請求項１の発明によれば、バッファ領域毎の演算結果がバッファ領域の有効桁数を超えた場合、演算部１００は、上位の設定指数のバッファ領域に繰り上げを行うこと、又は、下位の設定指数のバッファ領域を繰り下げることができる。よって、演算部１００は、バッファ領域の有効桁数に対応できない値も、演算結果としてバッファ領域に格納することができ、演算結果の精度をさらに高めることができる。
【００１５】
また、請求項１の発明によれば、取得した入力値の指数部ｅに対応するバッファ領域が用意されていない場合、バッファ管理部１０３は、取得した入力値の指数部ｅに対応するバッファ領域を追加することができる。よって、演算部１００は、誤差として削除され得る小さい値も、演算結果としてバッファ領域に格納することができ、演算結果の精度をさらに高めることができる。
【図面の簡単な説明】
【００１６】
【図１】演算装置１の構成例を示すブロック図である。
【図２】物体周りを流れる流体のパラメータの演算について説明するための参考図である。
【図３】演算装置１による処理例を説明するためのフローチャートである。
【図４】演算装置１による処理例について説明するための図である。
【図５】浮動小数点演算装置１０の一例を示す図である。
【図６】入力値のデータ形式の一例を示した図である。
【図７】演算部１００の構成例を示すブロック図である。
【図８】バッファテーブル１０８の一例を示す図である。
【図９】演算部１０による処理例を説明するためのフローチャートである。
【図１０】図７に示す処理例の続きを説明するためのフローチャートである。
【図１１】演算部１００による実施例１について説明するための参照図である。
【図１２】演算部１００による実施例２について説明するための参照図である。
【図１３】演算部１００による実施例３について説明するための参照図である。
【図１４】演算部１００による実施例４について説明するための参照図である。
【図１５】演算部１００による実施例５について説明するための参照図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照し、本発明に係る演算装置の実施形態について説明する。本実施形態では、ＣＦＤによる解析処理を実行する演算装置１について説明する。
図１，２を参照して、演算装置１について説明する。図１は、演算装置１の構成例を示すブロック図である。図２は、物体周りを流れる流体のパラメータの演算について説明するための参考図である。
図１に示す通り、演算装置１は、初期処理部２と、パラメータ算出部３と、時間方向加減演算部４と、空気抵抗値演算部５と、収束判定部６とを備える。
【００１８】
初期処理部２は、ＣＦＤによる解析処理の初期処理を行う。
はじめに、初期処理部２は、図２（Ａ）に示すような、物体Ｏと計算領域Ｒとを設定する。図示の例では、物体Ｏは翼であり、計算領域Ｒは、ＸＹＺ軸方向に広がる空間である。計算領域Ｒは、計算したい物体周りの流れを表わす場であって、入口境界Ｌ１と、出口境界Ｌ２と、上面境界Ｌ３と、下方境界Ｌ４とで囲まれた領域である。
次いで、初期処理部２は、図２（Ｂ）に示すような格子を、計算領域Ｒ内に設定する。初期処理部２は、図示の通り、流体現象を解く場所に網目状の格子を設定し、網目同士が交差する点（以下、格子点という）を設定する。なお、物体Ｏの表面の法線ベクトルは、物体Ｏの形状が決まることでおのずと決まる。初期処理部２は、例えば、法線ベクトルの方向に対数関数の刻みで基準幅ずつ伸ばした線により、格子の網目を設定する。
【００１９】
初期処理部２は、図２（Ｃ）に示すように、境界条件を設定する。実施形態において、初期処理部２は、入口境界Ｌ１における条件、出口境界Ｌ２における条件、上面境界Ｌ３における条件、及び、下方境界Ｌ４における条件として、各境界における物理的意味を再現するための条件値を設定する。
初期処理部２は、図２（Ｄ）に示すように、各格子点の初期条件を設定する。実施形態において、初期処理部２は、各格子点上に、解ベクトルの値を設定する。解ベクトルとは、密度、運動量、全エネルギーのベクトルである。
【００２０】
パラメータ算出部３は、所定の計算式に基づいて計算単位（格子）ごとの流体のパラメータ（保存量）を算出する。実施形態において、パラメータ算出部３は、流体のパラメータとして、解ベクトルを算出する。また、パラメータ算出部３は、例えば、Δｔだけ時間を進めることで解ベクトルを更新し、解ベクトルの時間積分を実施する。
【００２１】
時間方向加減演算部４は、パラメータ算出部３により算出された計算単位（格子）ごとの流体のパラメータ（保存量）を時間方向に加減演算する。本実施形態において、時間方向加減演算部４は、収束判定部６により空気抵抗値（Ｃｄ（Constant Drag）値）の時間方向の変化量が収束したと判定した場合、収束したと判定した後にパラメータ算出部３が算出した解ベクトルを時間方向に加減演算する。
時間方向加減演算部４は、各格子に対応する演算部１００を複数備え、各演算部１００が、計算単位（格子）ごとの流体のパラメータを時間方向に加減演算する。また、時間方向加減演算部４は、複数の演算部１００の演算結果に対してさらに加減演算をする全体処理部１２を備える。なお、演算部１００と全体処理部１２については、図４を参照して後述する。
【００２２】
また、時間方向加減演算部４は、パラメータ算出部３により算出された計算単位（格子）ごとの空気抵抗値（Ｃｄ値）を時間方向に加減演算する。本実施形態において、時間方向加減演算部４は、収束判定部６により空気抵抗値（Ｃｄ値）の変化量が収束したと判定した場合、収束したと判定した後に算出した空気抵抗値（Ｃｄ値）を時間方向に加減演算する。
時間方向加減演算部４は、流体のパラメータの加減演算とは異なる演算部１００を格子ごとに備え、各演算部１００が、計算単位（格子）ごとの空気抵抗値（Ｃｄ値）を時間方向に加減演算する。また、時間方向加減演算部４は、これら演算部１００による空気抵抗値（Ｃｄ値）の演算結果に対してさらに加減演算をする全体処理部１２を備える。
【００２３】
空気抵抗値演算部５は、物体Ｏに作用する空気抵抗値（Ｃｄ値）を算出する。空気抵抗値演算部５は、物体Ｏの表面の圧力、物体Ｏの表面の法線ベクトル、及び求めたい抵抗の向きから、空気抵抗値（Ｃｄ値）を求める。なお、物体Ｏの表面の圧力は、解ベクトルの密度、運動量、全エネルギーのベクトルから求められる。
【００２４】
収束判定部６は、空気抵抗値演算部５により算出された空気抵抗値（Ｃｄ値）の収束度合いを判定する。Δｔだけ時間を進めるとき、更新された空気抵抗値（Ｃｄ値）は、初めのころにばらつき、その後収束する。収束判定部６は、Δｔだけ時間を進めたときの前後において、空気抵抗値（Ｃｄ値）を比較する。Δｔ時間経過の前後において、空気抵抗値（Ｃｄ値）の差分が閾値以下である場合、又は、空気抵抗値（Ｃｄ値）の差分が閾値以下となる状態が所定の時間だけ続いた場合、収束したと判定する。
【００２５】
ここで、パラメータ算出部３により解ベクトルを求めるための演算例について説明する。
パラメータ算出部３は、例えば、以下に示す保存形のナビエ・ストークス方程式の偏微分を差分として扱うことによって、解ベクトルを求める。
【００２６】
【数１】
2015232833.tif 000003
【００２７】
ここで、ｔ、ｘおよびＲｅは、それぞれ、時間、座標およびレイノルズ数である。ｉ、ｊおよびｋは、上記および以下の方程式において、座標インデックスを表し、アインシュタインの総和則がそれぞれのインデックスに適用される。保存変数ベクトルＵ、非粘性フラックス・ベクトルＦ（Ｕ）および粘性フラックス・ベクトルＧ（Ｕ）は、
【００２８】
【数２】
2015232833.tif 000004
によって定義される。ここで、ρ, ｐ, ｅ，ＴおよびＫは、密度、圧力、全エネルギー、温度および流体の熱伝導率であり、ｕｉは、座標方向における流れの速度成分を表す。この方程式のセットは、完全気体の状態方程式によって閉じられる。
【００２９】
【数３】
2015232833.tif 000005
ここでγは、比熱の比率である。粘性応力テンソルの成分τｉｊは、
【００３０】
【数４】
2015232833.tif 000006
によって与えられる。ここでδｉｊは、クロネッカーのデルタ記号であり、μは、サザランドの関係によって定まる粘性係数である。
【００３１】
次に、図３を参照して、演算装置１による処理について説明する。図３は、演算装置１による処理例を説明するためのフローチャートである。
はじめに、初期処理部２は、物体Ｏと計算領域Ｒとを設定し（ステップＳＴ１）、格子を計算領域Ｒ内に設定する（ステップＳＴ２）。初期処理部２は、境界条件を設定し（ステップＳＴ３）、各格子点の初期条件を設定する（ステップＳＴ４）。
次いで、パラメータ算出部３は、ＣＦＤ解析処理を実行する（ステップＳＴ５）。例えば、パラメータ算出部３は、所定の計算式に基づいて格子ごとの解ベクトルを算出すると共に、解ベクトルの時間積分を実施する。
演算装置１は、後処理を実行する（ステップＳＴ６）。演算装置１は、時間方向に解ベクトルを算出する反復回数が上限値に達したか否かを判定する（ステップＳＴ７）。演算装置１は、反服回数が上限値に達するまで、ＣＦＤ解析処理と後処理とを繰り返し実行する。
【００３２】
次に、ステップＳＴ６の後処理について説明する。
パラメータ算出部３は、算出した解ベクトルに基づき、Δｔ後に再び実行されるＣＦＤ解析処理のためのリスタート用データを生成し、例えば一次記憶部（図示せず）に出力する（ステップＳＴ８）。
また、パラメータ算出部３は、算出した解ベクトルに基づき、可視可用データを生成し、例えば一次記憶部（図示せず）に出力する（ステップＳＴ９）。
そして、パラメータ算出部３は、統計量を算出し、例えば一次記憶部（図示せず）に出力する（ステップＳＴ１０）。
【００３３】
次に、ステップＳＴ１０の統計量の算出処理について説明する。
パラメータ算出部３は、Ｌ２／ｉｎｆノルム値を算出し、例えば一次記憶部（図示せず）に出力する（ステップＳＴ１１）。
空気抵抗値演算部５は、物体Ｏに作用する空気抵抗値（Ｃｄ値）を算出し、収束判定部６に出力する（ステップＳＴ１２）。
収束判定部６は、空気抵抗値演算部５により算出された空気抵抗値（Ｃｄ値）に基づき、空気抵抗値（Ｃｄ値）の時間方向の変化量が収束したか否かを判定する（ステップＳＴ１３）。
空気抵抗値（Ｃｄ値）が収束したと判定しない場合、パラメータ算出部３は、収束判定部６の判定結果に基づき、ステップＳＴ１０の処理を終了し、ステップＳＴ７の処理に移行する。
【００３４】
一方、空気抵抗値（Ｃｄ値）が収束したと判定した場合、時間方向加減演算部４は、平均値の算出を開始する（ステップＳＴ１４）。
例えば、時間方向加減演算部４は、複数の演算部１００を利用して、空気抵抗値演算部５が算出した複数の空気抵抗値（Ｃｄ値）を時間方向に加減演算し、加減演算の演算結果に基づき空気抵抗値（Ｃｄ値）の平均値を求める（ステップＳＴ１５）。
また、時間方向加減演算部４は、複数の演算部１００を利用して、パラメータ算出部３が算出した複数の解ベクトルを時間方向に加減演算し、加減演算の演算結果に基づき解ベクトルの平均値を求める（ステップＳＴ１６）。
なお、ステップＳＴ６の後処理や、ステップＳＴ１０の統計量の算出処理、ステップＳＴ１４の平均値算出処理については、それぞれ実施形態以外の処理を含めてもよい。
【００３５】
なお、計算領域Ｒを複数の計算領域Ｒ１，Ｒ２，Ｒ３…に分割して、分割された計算領域ごとに平均値を算出してもよい。図４は、本実施形態に係る演算装置１による処理例について説明するための図である。
演算装置１は、コンピュータ・クラスターを用いて並列処理によるシミュレーションを実行する。演算装置１は、例えば複数の演算部１００＿１，１００＿２，１００＿３…を備える。なお、複数の演算部は、それぞれコンピュータ・クラスターのノードである。
演算部１００＿１，１００＿２，１００＿３…は、それぞれ、分割された計算領域Ｒ１，Ｒ２，Ｒ３…ごとに、空気抵抗値（Ｃｄ値）の平均値や解ベクトルの平均値を求める。
【００３６】
図示の例では、演算部１００＿１の加減演算により、バッファ領域１０７１〜１０７３に演算結果が格納されている。演算部１００＿２の加減演算により、バッファ領域１０７３〜１０７５に演算結果が格納されている。演算部１００＿３の加減演算により、バッファ領域１０７２〜１０７４に演算結果が格納されている。
全体処理部１２は、複数の演算部１００＿１，１００＿２，１００＿３…のそれぞれにおけるバッファの指数に基づき、各演算部から取得する出力値の指数を決定する。全体処理部１２は、予め決められた設定値に基づき出力値の指数を決定してもよく、演算結果が記憶されている各演算部のバッファ領域に基づき出力値の指数を決定してもよい。なお、後者の場合、全体処理部１２は、複数の演算部１００＿１，１００＿２，１００＿３…の全体において、演算結果が記憶されているバッファ領域の数が多い順に、出力値の指数を決定してもよい。図示の例では、演算部１００＿１，１００＿２，１００＿３…の全体において、全てのバッファ領域１０７３に演算結果が記憶されているため、全体処理部１２は、バッファ領域１０７３より上位の３つのバッファ領域１０７１，１０７２，１０７３の指数部を、出力値の指数部と決定してもよい。この場合、全体処理部１２は、演算部１００＿１，１００＿２，１００＿３…のうち、バッファ領域１０７１，１０７２，１０７３に格納されている情報を指数毎に加減演算して、得られた演算結果に基づき平均値を算出する。
このように、分割された計算領域Ｒ１，Ｒ２，Ｒ３…ごとに精度の高い演算結果を得ることができるため、全体処理部１２としても、精度の高い演算結果を得ることができる。
【００３７】
また、全体処理部１２は、出力値の指数を決定する場合、複数の演算部１００＿１，１００＿２，１００＿３…から演算結果の入力を受け付けるのではなく、各演算部において演算結果が格納されているバッファ領域の識別情報だけの入力を受け付ける。
全体処理部１２は、複数の演算部１００＿１，１００＿２，１００＿３…からのバッファ領域の識別情報に基づき、出力値の指数を決定する。全体処理部１２は、決定した出力値の指数を示す情報を、演算部１００＿１，１００＿２，１００＿３…のそれぞれに送信する。演算部１００＿１，１００＿２，１００＿３…は、全体処理部１２からの出力値の指数に相当するバッファ領域から演算結果を読み出し（抽出し）、読み出した演算結果を全体処理部１２に出力する。
例えば、全体処理部１２がバッファ領域１０７１，１０７２，１０７３を示す識別情報を演算部１００＿１，１００＿２，１００＿３に出力した場合、演算部１００＿１がバッファ領域１０７２〜１０７４に格納されている演算結果を読み出し、演算部１００＿２がバッファ領域１０７３，１０７４に格納されている演算結果を読み出し、演算部１００＿３がバッファ領域１０７２，１０７３に格納されている演算結果を読み出し、全体処理部１２に出力する。
これにより、全体処理部１２は、出力値に必要な指数部の情報だけを、複数の演算部１００＿１，１００＿２，１００＿３…から得ることができる。よって、全体処理部１２による処理負荷を軽減し、複数の演算部１００＿１，１００＿２，１００＿３…と全体処理部１２とでやり取りされる情報量を削減できる。
【００３８】
次に、図５を参照して、浮動小数点演算装置１０の一例について説明する。図５は、浮動小数点演算装置１０の一例を示す図である。
浮動小数点演算装置１０は、複数の演算部１００を備える部分処理部１１と、全体処理部１２とを備える。実施形態において、部分処理部１１に含まれる複数の演算部１００は、それぞれ同じ機能を有する構成であって、例えば、１つの処理基板である。部分処理部１１は、処理基板である演算部１００を複数備えたコンピュータ・クラスターである。複数の演算部１００はそれぞれ、全体処理部１２と接続されており、演算結果を全体処理部１２に出力する。全体処理部１２は、複数の演算部１００からの出力に基づき１つの演算結果を求める。
【００３９】
次に、図６を参照して、演算部１００に入力する入力値の一例について説明する。図６は、演算部１００に入力する入力値のデータ形式の一例を示した図である。
演算部１００に入力する入力値は、例えば浮動小数点のデータ形式で表現される情報である。実施形態において、入力値は、ＩＥＥＥ（Institute of Electrical and Electronics Engineers）方式のデータであって、符号部Ｓと、指数部ｅと、仮数部ｆとを備える。なお、符号部Ｓは、１ビットであり、指数部ｅと仮数部ｆのビット長は、演算部１００により採用されているフォーマットに応じて決められている。実施形態において、演算部１００が処理する浮動小数点の指数部ｅと仮数部ｆのビット長は、全て同じ長さである。
なお、演算部１００に入力するときに浮動小数点のデータ形式でない場合、演算部１００は、入力した値を浮動小数点のデータ形式に変換し、浮動小数点演算を実行する。
【００４０】
次に、図７を参照して、演算部１００の構成例について説明する。図７は、演算部１００の構成例を示すブロック図である。
演算部１００は、制御部１０１と、バッファ部１０７と、バッファテーブル１０８とを備える。制御部１０１は、例えば、ＣＰＵ（Central Processing Unit）であって、演算部１００の動作を統括的に制御する制御部である。演算部１００は、ＣＰＵである制御部１０１がプログラムを実行することにより機能する機能部として、入力値取得部１０２と、バッファ管理部１０３と、選択部１０４と、加減演算部１０５と、出力決定部１０６と、を備える。これら機能部の一部又は全部は、ＬＳＩ（Large Scale Integration）やＡＳＩＣ（Application Specific Integrated Circuit）などのハードウェア機能部であってもよい。
実施形態において、加減演算部１０５が処理可能な数値の指数と有効桁数は、予め決められている。また、バッファ部１０７に形成されるバッファ領域の指数と有効桁数も、加減演算部１０５が処理可能な数値に応じて予め決められている。以下、バッファ部に形成されるバッファの領域に対して予め決められた指数を、設定指数という。バッファ部には、例えば、設定指数「＋３２」「＋１６」「＋００」「−１６」「−３２」のそれぞれに対応するバッファ領域が用意される。
【００４１】
入力値取得部１０２は、入力値を取得し、バッファ管理部１０３と、選択部１０４と、加減演算部１０５とに、それぞれ出力する。入力値取得部１０２は、前処理の構成部から出力された情報を順次入力値として取得してもよく、所定の記憶領域に記憶されている入力値を順次１つずつ読み出して取得してもよい。
【００４２】
バッファ管理部１０３は、バッファテーブル１０８を参照して、バッファ部１０７に含まれるバッファ領域のうち、加減演算部１０５により利用されるバッファ領域を管理する。バッファ管理部１０３は、入力値の指数部ｅに対応する設定指数のバッファ領域が用意されていない場合、入力値の指数部ｅに対応する設定指数のバッファ領域を追加する。
バッファ管理部１０３は、バッファテーブル１０８を参照して、入力値の指数部ｅ及び有効桁数がバッファの設定指数及び有効桁数との範囲内となるように、入力値を変換（分散）し、選択部１０４と加減演算部１０５とに出力する。
例えば、入力値の指数部ｅがバッファの設定指数の範囲内でない場合、バッファ管理部１０３は、入力値の指数部ｅがバッファの設定指数となる浮動小数点へ、入力値を変換する。指数部ｅを変換した後の入力値の有効桁数がバッファの有効桁数の範囲外となる場合、バッファ管理部１０３は、入力値をそれぞれ異なる指数部ｅの浮動小数点に分割して、バッファの設定指数及び有効桁数の範囲内となる数値に変換する。
【００４３】
具体的に説明すると、入力値の指数部ｅが「−１５」であった場合、バッファ管理部１０３は、入力値の指数部ｅがバッファの設定指数（例えば、「＋００」「−１６」）の範囲内でないと判定する。この場合、バッファ管理部１０３は、入力値の仮数部ｆに基づき、指数部ｅが「＋００」又は「−１６」となる浮動小数点へ、入力値を変換する。例えば、入力値の指数部ｅがバッファの設定指数「−１６」となる浮動小数点へ変換し、変換後の入力値の有効桁数がバッファの有効桁数である「１６」を超えた場合、バッファ管理部１０３は、入力値を、指数部ｅ「＋００」と指数部ｅ「−１６」の値、あるいは、指数部ｅ「−１６」と指数部ｅ「−３２」の値に分割する。つまり、入力値が、バッファの指数部や有効桁数の範囲を跨いでいる場合、バッファ管理部１０３は、入力値を分割して、加減演算部１０５により加減演算される指数部の範囲内に含まれる浮動小数点に変換する。
【００４４】
選択部１０４は、入力値の指数部ｅに基づき、複数のバッファ領域１０７１〜１０７５の中から、入力値に対応するバッファ領域を選択する。実施形態において、選択部１０４は、バッファテーブル１０８を参照して、入力値の指数部ｅに対応するバッファ領域のアドレスを読み出し、読み出したアドレスに対応するバッファ領域１０７１〜１０７５を、入力値の指数部ｅに対応するバッファ領域として選択する。
【００４５】
加減演算部１０５は、選択部１０４により選択されたバッファ領域に格納されている値と、入力値取得部１０２が取得した入力値とに基づき加減演算した結果を、選択部１０４により選択されたバッファ領域に書き込む。バッファ領域に既に値が保存されている場合、加減演算部１０５は、最新の演算結果を上書きする。
【００４６】
出力決定部１０６は、バッファ部１０７に格納された値に基づき、複数の入力値に基づく加減演算の結果を決定する。実施形態において、出力決定部１０６が出力する情報のビット数が決められている。バッファ領域１０７１〜１０７５のうちいずれか１つに格納されている情報のビット数が、出力決定部１０６が出力可能な出力値のビット数と決められている。よって、出力決定部１０６は、１以上の数字が格納されているバッファ領域１０７１〜１０７５のうち最も上位のバッファ領域から読み出した情報を、出力値として決定する。例えば、バッファ領域１０７１〜１０７５のうち設定指数「＋００」「−１６」「−３２」のバッファ領域に１以上の数字が格納されている場合、出力決定部１０６は、設定指数「＋００」「−１６」「−３２」のうち最も上位の設定指数「＋００」のバッファ領域に格納されている情報を出力値に決定する。なお、設定指数「＋００」のバッファ領域に格納されている情報が「０」である場合、出力決定部１０６は、次に上位の「−１６」のバッファ領域に格納されている情報を、出力値に決定する。
【００４７】
バッファ部１０７は、バッファアドレスが割り当てられた複数のバッファ領域１０７１〜１０７５…を備える。複数のバッファ領域１０７１〜１０７５…は、例えば、ＲＡＭ上に設定される。バッファ領域１０７１〜１０７５は、予め決められた容量毎に区分される領域であって、指数の異なる複数の値がそれぞれ格納されるバッファである。
実施形態において、バッファ領域１０７１〜１０７５の容量は、加減演算部１０５によって処理されるデータの有効桁数に応じて予め決められている。バッファ領域１０７１は、指数部ｅ「＋３２」の値を格納するバッファである。バッファ領域１０７２は、指数部ｅ「＋１６」の値を格納するバッファである。バッファ領域１０７３は、指数部ｅ「＋００」の値を格納するバッファである。バッファ領域１０７４は、指数部ｅ「−１６」の値を格納するバッファである。バッファ領域１０７５は、指数部ｅ「−３２」の値を格納するバッファである。
【００４８】
バッファテーブル１０８は、バッファ領域の設定指数、有効桁数、割り当てられた領域のアドレス等を示す情報を格納するテーブルである。バッファテーブル１０８は、例えば、制御部１０１のＣＰＵに付設されたレジスタ上に設定される。
【００４９】
次に、図８を参照して、バッファテーブル１０８の一例について説明する。図８は、バッファテーブル１０８の一例を示す図である。
バッファテーブル１０８は、例えば、バッファの設定指数を示す情報と、バッファの有効桁数を示す情報と、バッファのアドレスを示す情報とを対応付けて格納するテーブルである。
バッファの設定指数とは、各バッファ領域１０７１〜１０７５が格納するデータの指数を示す情報である。バッファの設定指数は、加減演算部１０５が演算する浮動小数点の指数に応じて予め決められている。実施形態において、バッファの設定指数は「＋３２」「＋１６」「＋００」「−１６」「−３２」である。
バッファの有効桁数とは、各バッファ領域１０７１〜１０７５が格納するデータの有効桁数の上限値を示す情報である。実施形態において、バッファの有効桁数の上限値は、バッファ領域の全てにおいて、「１６」である。
バッファのアドレスとは、バッファ部１０７において、各バッファ領域１０７１〜１０７５の位置を示す情報である。バッファのアドレスにバッファ領域の位置を示す情報が登録されている場合、当該バッファが加減演算部１０５のバッファとして割り当てられていることを意味している。
【００５０】
次に、図９を参照して、演算部１００による処理について説明する。図９は、演算部１００による処理例を説明するためのフローチャートである。
入力値取得部１０２は、順次入力値を取得する（ステップＳＴ１０１）。入力値取得部１０２は、取得した入力値を、バッファ管理部１０３と、選択部１０４と、加減演算部１０５とに、それぞれ出力する。例えば、入力値取得部１０２は、入力値として数値データＤ１（一例として、1.000100010001000E+00）を取得し、数値データＤ１を、バッファ管理部１０３と、選択部１０４と、加減演算部１０５とに、それぞれ出力する。この数値データＤ１は、符号部Ｓに「＋」を示す情報、指数部ｅに「＋００」を示す情報、仮数部ｆに「1000100010001000」を示す情報を、それぞれ含む。仮数部ｆの有効桁数は「１６桁」である。
【００５１】
バッファ管理部１０３は、バッファテーブル１０８を参照して、入力値の指数部ｅがバッファの設定指数の範囲内か否かを判定する（ステップＳＴ１０２）。実施形態において、バッファ管理部１０３は、入力値である数値データＤ１の指数部ｅ「＋００」と一致する設定指数がバッファテーブル１０８に含まれるか否かを判定する。バッファテーブル１０８には、バッファの設定指数「＋００」が定義されている。つまり、数値データＤ１の指数部ｅ「＋００」と一致する設定指数がバッファテーブル１０８に含まれる。この場合、バッファ管理部１０３は、数値データＤ１の指数部ｅがバッファの設定指数の範囲内であると判定する。
【００５２】
入力値の指数部ｅがバッファの設定指数の範囲内であると判定した場合（ステップＳＴ１０２：ＹＥＳ）、バッファ管理部１０３は、バッファテーブル１０８を参照して、入力値の指数部ｅに対応するバッファ領域が用意されているか否かを判定する（ステップＳＴ１０３）。実施形態において、バッファ管理部１０３は、数値データＤ１の指数部ｅ「＋００」と一致するバッファテーブル１０８の設定指数に、バッファのアドレスが対応付けられているか否かを判定する。バッファテーブル１０８には、バッファの設定指数が「＋００」であるバッファ領域のアドレスが書き込まれていないとする。この場合、バッファテーブル１０８において設定指数「＋００」に対応するバッファのアドレスが用意されていないことを意味している。よって、バッファ管理部１０３は、入力値である数値データＤ１の指数部ｅに対応するバッファ領域が用意されていないと判定する。
【００５３】
入力値の指数部ｅに対応するバッファ領域が用意されていないと判定した場合（ステップＳＴ１０３：ＮＯ）、バッファ管理部１０３は、入力値である数値データＤ１の指数部ｅに対応するバッファ領域を追加する（ステップＳＴ１０４）。バッファ管理部１０３は、数値データＤ１の指数部ｅに基づき、数値データＤ１の指数部ｅに対するバッファ領域を割り当て、割り当てたバッファのアドレスをバッファテーブル１０８に書き込む。実施形態において、バッファ管理部１０３は、数値データＤ１の指数部ｅ「＋００」に対するバッファ領域として、バッファ領域１０７３を割り当てる。バッファ管理部１０３は、数値データＤ１の指数部ｅに対するバッファ領域として割り当てたバッファ領域１０７３のアドレスを示す情報を、バッファテーブル１０８において、設定指数「＋００」に対応するバッファのアドレスの欄に書き込む。これにより、入力値の指数部ｅ「＋００」に対応するバッファ領域１０７３が追加される。
バッファ管理部１０３は、設定指数「＋００」に対応するバッファ領域が追加されたことを選択部１０４に通知する。
【００５４】
選択部１０４は、バッファテーブル１０８を参照して、入力値の指数部ｅに対応するバッファ領域のアドレスを読み出し、入力値の指数部ｅに対応するバッファアドレスを選択する（ステップＳＴ１０５）。入力値の指数部ｅに対応するバッファ領域のアドレスが登録されていない場合、選択部１０４は、バッファ管理部１０３からバッファ領域が追加されたことの通知を受けた後、バッファテーブル１０８を参照して、入力値の指数部ｅに対応するバッファ領域のアドレスを読み出し、入力値の指数部ｅに対応するバッファ領域１０７３を選択する。選択部１０４は、選択したバッファ領域１０７３を示す情報を、加減演算部１０５に出力する。
加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７３に数値データＤ１を書き込む（ステップＳＴ１０６）。
【００５５】
次いで、入力値取得部１０２が、入力値として、数値データＤ２（一例として、2.000200020002000E+00）を取得し、取得した数値データＤ２を、バッファ管理部１０３と、選択部１０４と、加減演算部１０５とに、それぞれ出力する。この数値データＤ２は、符号部Ｓに「＋」を示す情報、指数部ｅに「＋００」を示す情報、仮数部ｆに「200020002000200」を示す情報を、それぞれ含む。仮数部ｆの有効桁数は「１６桁」である。
【００５６】
上述の通り、バッファ管理部１０３は、数値データＤ１を記憶する際に、設定指数「＋００」のバッファ領域１０７３を追加している。従って、ステップＳＴ１０３の判定において、バッファ管理部１０３は、数値データＤ２の指数部ｅ「＋００」に対応するバッファ領域１０７３が用意されていると判定する（ステップＳＴ１０３：ＹＥＳ）。バッファ管理部１０３は、判定結果を選択部１０４に出力する。
数値データＤ２の指数部ｅ「＋００」に対応するバッファ領域１０７３が用意されていると判定された場合、選択部１０４は、バッファテーブル１０８を参照して、入力値の指数部ｅ「＋００」に対応するバッファ領域のアドレスを読み出し、入力値の指数部ｅに対応するバッファ領域１０７３を選択する（ステップＳＴ１０７）。選択部１０４は、選択したバッファ領域１０７３を示す情報を加減演算部１０５に出力する。
【００５７】
加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７３から、格納されているバッファの値を読み出す（ステップＳＴ１０８）。実施形態において、バッファ領域１０７３には数値データＤ１が格納されているため、加減演算部１０５は、数値データＤ１を読み出す。
そして、加減演算部１０５は、読み出した数値データＤ１と、入力値である数値データＤ２とに基づき加減演算をする（ステップＳＴ１０９）。実施形態において、加減演算部１０５は、数値データＤ１と数値データＤ２とを加算し、演算結果（Ｄ１＋Ｄ２＝3.000300030003000E+00）を得る。
【００５８】
ステップＳＴ１０２において、入力値の指数部ｅがバッファの設定指数の範囲内でないと判定した場合（ステップＳＴ１０２：ＮＯ）、バッファ管理部１０３は、バッファテーブル１０８を参照して、入力値の指数部ｅと有効桁数がバッファの設定指数と有効桁数の範囲内となるように、入力値を変換し、選択部１０４と加減演算部１０５とを出力する（ステップＳＴ１１０）。入力値の指数部ｅがバッファの設定指数の範囲内でない場合、バッファ管理部１０３は、入力値の指数部ｅをバッファの設定指数となる浮動小数点へ変換する。指数部ｅを変換した後の入力位置の有効桁数がバッファの有効桁数の範囲外となる場合、バッファ管理部１０３は、入力値をそれぞれ異なる指数部ｅの値に分割して、バッファの設定指数及び有効桁数の範囲内となる数値に変換する。
【００５９】
次いで、図１０を参照して、演算部１００による処理の続きについて説明する。図１０は、図９に示す処理例の続きを説明するためのフローチャートである。
ステップＳＴ１０９の処理の後、加減演算部１０５は、バッファテーブル１０８を参照して、演算結果の有効桁数がバッファの有効桁数を超えるか否かを判定する（ステップＳＴ１１１）。実施形態において、加減演算部１０５は、バッファテーブル１０８を参照して、ステップＳＴ１０７において選択部１０４により選択されたバッファ領域１０７３の有効桁数「１６」を得る。加減演算部１０５は、演算結果の有効桁数がバッファ領域１０７３の有効桁数「１６」を超えるか否かを判定する。演算結果（Ｄ１＋Ｄ２＝3.000300030003000E+00）の有効桁数は「１６」であるため、加減演算部１０５は、バッファ領域１０７３の有効桁数「１６」を超えないと判定する。
【００６０】
演算結果の有効桁数がバッファの有効桁数を超えないと判定された場合（ステップＳＴ１１１：ＮＯ）、加減演算部１０５は、演算結果（3.000300030003000E+00）をバッファ領域１０７３に上書きする（ステップＳＴ１１２）。
【００６１】
次いで、入力値取得部１０２が、入力値として、数値データＤ３（一例として、7.000700070007000E+00）を取得し、取得した入力値Ｄ３を、バッファ管理部１０３と、選択部１０４と、加減演算部１０５とに、それぞれ出力したとする。この入力値Ｄ３は、符号部Ｓに「＋」を示す情報、指数部ｅに「＋００」を示す情報、仮数部ｆに「7000700070007000」を示す情報を、それぞれ含む。仮数部ｆの有効桁数は「１６」である。
【００６２】
上述の通り、設定指数「＋００」のバッファ領域１０７３は、数値データＤ１を記憶する際に選択部１０４によって追加されている。従って、ステップＳＴ１０３の判定において、選択部１０４は、数値データＤ３の指数部ｅ「＋００」に対応するバッファ領域１０７３が用意されていると判定する（ステップＳＴ１０３：ＹＥＳ）。そして、選択部１０４は、設定指数「＋００」のバッファ領域１０７３を選択する（ステップＳＴ１０７）。
次いで、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７３から、格納されているバッファの値を読み出す（ステップＳＴ１０８）。実施形態において、バッファ領域１０７３には数値データＤ１＋Ｄ２の演算結果が格納されているため、加減演算部１０５は、演算結果（Ｄ１＋Ｄ２）を読み出す。
そして、加減演算部１０５は、読み出した演算結果（Ｄ１＋Ｄ２）と、入力値である数値データＤ３とに基づき加減演算をする（ステップＳＴ１０９）。実施形態において、加減演算部１０５は、演算結果（Ｄ１＋Ｄ２）と数値データＤ３とを加算し、演算結果Ａ（Ｄ１＋Ｄ２＋Ｄ３＝10.001000100010000E+00）を得る。
加減演算部１０５は、バッファテーブル１０８を参照して、演算結果の有効桁数がバッファの有効桁数を超えるか否かを判定する（ステップＳＴ１１１）。実施形態において、演算結果Ａ（Ｄ１＋Ｄ２＋Ｄ３＝10.001000100010000E+00）の有効桁数は「１７」であるため、加減演算部１０５は、バッファ領域１０７３の有効桁数「１６」を超えていると判定する。
【００６３】
演算結果の有効桁数がバッファの有効桁数を超えていると判定された場合（ステップＳＴ１１１：ＹＥＳ）、加減演算部１０５は、演算結果Ａ（10.001000100010000E+00）をバッファの有効桁数の範囲内となる値に変換する（ステップＳＴ１１３）。実施形態において、加減演算部１０５は、演算結果Ａ（10.001000100010000E+00）のうちバッファの設定指数及び有効桁数の範囲から外れる値を、繰り上げ又は繰り下げることにより、演算結果Ａ（10.001000100010000E+00）を、繰り上げ後又は繰り下げ後の指数部ｅのデータと、繰り上げ前又は繰り下げ前の指数部ｅのデータとに分割する。
具体的に説明すると、加減演算部１０５は、演算結果Ａ（10.001000100010000E+00）のうちバッファの設定指数及び有効桁数の範囲から外れる値Ａ１（10.000000000000000E+00）と、バッファの設定指数及び有効桁数の範囲内の値Ａ２（0.001000100010000E+00）と、に分割する。なお、加減演算部１０５は、演算結果Ａの指数部ｅとバッファの設定指数に基づき、演算結果Ａのうちバッファの有効桁数の範囲から外れる値Ａ１を決定する。また、加減演算部１０５は、バッファの有効桁数の範囲から外れる値Ａ１（10.000000000000000E+00）を上位の設定指数に対応する値に繰り上げて、繰り上げ後の値Ａ１´（0.000000000000001E+16）に変換する。つまり、加減演算部１０５は、演算結果Ａ（10.001000100010000E+00）を、繰り上げ後の指数部ｅ「＋１６」に対応する演算結果Ａ１´（0.000000000000001E+16）と、繰り上げ前の指数部ｅ「＋００」に対応する演算結果Ａ２（0.001000100010000E+00）とに変換する。
【００６４】
そして、加減演算部１０５は、繰り上げ前又は繰り下げ前の指数部ｅ「＋００」に対応する演算結果Ａ２（0.00100010001000E+00）を、設定指数「＋００」のバッファ領域１０７３に上書きする（ステップＳＴ１１４）。
【００６５】
次いで、バッファ管理部１０３は、バッファテーブル１０８を参照して、繰り上げ後又は繰り下げ後の設定指数「＋００」に対応するバッファ領域が用意されているか否かを判定する（ステップＳＴ１１５）。実施形態において、バッファ管理部１０３は、繰り上げ後の演算結果Ａ´の指数部ｅ「＋１６」と一致するバッファテーブル１０８の設定指数に、バッファのアドレスが対応付けられているか否かを判定する。バッファテーブル１０８には、バッファの設定指数が「＋１６」であるバッファ領域のアドレスが定義されていないとする。この場合、バッファテーブル１０８において指数部ｅ「＋１６」に対応するバッファ領域が用意されていないことを意味している。よって、選択部１０４は、繰り上げ後の演算結果Ａ１´（0.000000000000001E+16）の指数部ｅ「＋１６」に対応するバッファ領域が用意されていないと判定する。
【００６６】
演算結果の指数部ｅに対応するバッファ領域が用意されていないと判定した場合（ステップＳＴ１１５：ＮＯ）、バッファ管理部１０３は、演算結果の指数部ｅに対応するバッファ領域を追加する（ステップＳＴ１１６）。バッファ管理部１０３は、演算結果Ａ１´（0.000000000000001E+16）の指数部ｅ「＋１６」に基づき、演算結果Ａ´の指数部ｅに対応するバッファ領域を割り当て、割り当てたバッファ領域のアドレスをバッファテーブル１０８に書き込む。実施形態において、バッファ管理部１０３は、演算結果Ａ１´（0.000000000000001E+16）の指数部ｅ「＋１６」に対するバッファ領域として、バッファ領域１０７２を割り当てる。バッファ管理部１０３は、演算結果Ａ１´（0.000000000000001E+16）の指数部ｅ「＋１６」に対するバッファ領域として割り当てたバッファ領域１０７２のアドレスを示す情報を、バッファテーブル１０８において、設定指数「＋１６」に対応するバッファのアドレスの欄に書き込む。これにより、入力値の指数部ｅ「＋１６」に対応するバッファ領域１０７２が追加される。
【００６７】
そして、加減演算部１０５は、追加したバッファ領域１０７２に演算結果Ａ１´（0.000000000000001E+16）を書き込む（ステップＳＴ１１７）。
【００６８】
一方、ステップＳＴ１１５の判定において、繰り上げ後又は繰り下げ後の指数部ｅに対応するバッファ領域が用意されていると判定した場合（ステップＳＴ１１５：ＹＥＳ）、選択部１０４は、繰り上げ後又は繰り下げ後の指数部ｅに対応するバッファを選択する（ステップＳＴ１１８）。
次いで、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７３から、格納されているバッファの値を読み出す（ステップＳＴ１１９）。
そして、加減演算部１０５は、読み出したバッファの値と、繰り上げ後又は繰り下げ後の演算結果とに基づき加減演算をする（ステップＳＴ１２０）。
演算部１００は、ステップＳＴ１１１に戻って、ステップＳＴ１２０において算出された演算結果について、有効桁数がバッファの有効桁数を超えるか否かの判定を行う。
【００６９】
加減演算部１０５は、複数の入力値に基づいて上述の処理を繰り返し、全ての入力値についての加減演算が終了したか否かを判定する（ステップＳＴ１２１）。
全ての入力値についての加減演算が終了したと判定した場合（ステップＳＴ１２１：ＹＥＳ）、加減演算部１０５は、出力決定部１０６に対して、加減演算の処理の終了を通知する。これによい、出力決定部１０６は、バッファ部１０７に記憶されている情報に基づき、出力値を決定し、全体処理部１２に出力する（ステップＳＴ１２２）。
そして、出力決定部１０６は、バッファ部１０７の全てのデータを消去する（ステップＳＴ１２３）。
【００７０】
（実施例１）
次に、図１１を参照して、演算部１００による実施例１について説明する。図１１は、演算部１００による実施例１について説明するための参照図である。実施例１では、何らの入力値もない状態において、数値データＤ１１〜Ｄ１５が、この順番に入力値取得部１０２により取得された例について説明する。
はじめに、入力値取得部１０２が、入力値として、例えば数値データＤ１１（1.23456789012345E+00）を取得する。バッファ管理部１０３は、数値データＤ１１の指数部ｅ「＋００」に基づき、設定指数「＋００」に対応するバッファ領域として、バッファ領域１０７３を追加する。選択部１０４は、バッファテーブル１０８を参照して、バッファ管理部１０３により追加された設定指数「＋００」のバッファ領域１０７３を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７３に数値データＤ１１の仮数部ｆ（1.234567890123450）を書き込む。
【００７１】
次いで、入力値取得部１０２が、入力値として、例えば数値データＤ１２（1.23456789012345E-16）を取得する。バッファ管理部１０３は、数値データＤ１２の指数部ｅ「−１６」に基づき、設定指数「−１６」に対応するバッファ領域として、バッファ領域１０７４を追加する。選択部１０４は、バッファテーブル１０８を参照して、バッファ管理部１０３により追加された設定指数「−１６」のバッファ領域１０７４を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７４に数値データＤ１２の仮数部ｆ（1.234567890123450）を書き込む。
【００７２】
さらに、入力値取得部１０２が、入力値として、例えば数値データＤ１３（1.23456789012345E-32）を取得する。バッファ管理部１０３は、数値データＤ１３の指数部ｅ「−３２」に基づき、設定指数「−３２」に対応するバッファ領域として、バッファ領域１０７５を追加する。選択部１０４は、バッファテーブル１０８を参照して、バッファ管理部１０３により追加された設定指数「−３２」のバッファ領域１０７５を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７５に数値データＤ１３の仮数部ｆ（1.234567890123450）を書き込む。
【００７３】
次いで、入力値取得部１０２が、入力値として、例えば数値データＤ１４（1.23456789012345E-16）を取得する。選択部１０４は、バッファテーブル１０８を参照して、指数部ｅ「−１６」に基づき、設定指数「−１６」のバッファ領域１０７４を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７４に格納されている値（1.234567890123450）と数値データＤ１４の仮数部ｆ（1.234567890123450）とを、数値データＤ１４の符号部Ｓ（＋）に応じて演算（つまり加算）した演算結果（2.469135780246900）を、バッファ領域１０７４に上書きする。
【００７４】
さらに、入力値取得部１０２が、入力値として、例えば数値データＤ１５（−1.23456789012345E+00）を取得する。選択部１０４は、バッファテーブル１０８を参照して、指数部ｅ「＋００」に基づき、設定指数「＋００」のバッファ領域１０７３を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７３に格納されている値（1.234567890123450）と数値データＤ１５の仮数部ｆ（1.234567890123450）とを、数値データＤ１５の符号部Ｓ（−）に応じて演算（つまり減算）した演算結果（0.000000000000000）を、バッファ領域１０７３に上書きする。
【００７５】
そして、出力決定部１０６は、バッファ領域１０７３〜１０６５に格納されている情報に基づき、出力値を決定する。実施形態において、出力決定部１０６は、バッファ領域１０７４に記憶されている情報に基づき、出力値（2.469135780246900E-16）を出力する。
【００７６】
一方、本発明によらない場合、指数部ｅ「−１６」の値と指数部ｅ「−３２」の値は、指数部ｅ「＋００」の値よりも小さい値であるため、誤差として切り捨てられる場合がある。この場合、数値データＤ１１〜Ｄ１５を加減した結果は、（0.00000000000000E+00）となる。
実施例１に示す通り、演算部１００は、それぞれ異なる設定指数に対応するバッファ領域毎に入力値の加減算結果を記憶しておき、最終的な演算結果を得ることができる。よって、演算部１００は、誤差として削除され得る小さい値も、演算結果として得ることができる。
【００７７】
（実施例２）
次に、図１２を参照して、演算部１００による実施例２について説明する。図１２は、演算部１００による実施例２について説明するための参照図である。実施例２では、何らの入力値もない状態において、数値データＤ２１〜Ｄ２３が、この順番に入力値取得部１０２により取得された例について説明する。
はじめに、入力値取得部１０２が、入力値として、例えば数値データＤ２１（1.000000000000001E-16）を取得する。バッファ管理部１０３は、数値データＤ２１の指数部ｅ「−１６」に基づき、設定指数「−１６」に対応するバッファ領域として、バッファ領域１０７４を追加する。選択部１０４は、バッファテーブル１０８を参照して、バッファ管理部１０３により追加された設定指数「−１６」のバッファ領域１０７４を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７４に数値データＤ２１の仮数部ｆ（1.000000000000001）を書き込む。
【００７８】
次いで、入力値取得部１０２が、入力値として、例えば数値データＤ２２（9.000000000000002E-16）を取得する。選択部１０４は、バッファテーブル１０８を参照して、指数部ｅ「−１６」に基づき、設定指数「−１６」のバッファ領域１０７４を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７４に格納されている値（1.000000000000001）を読み出し、読み出した値と数値データＤ２２の仮数部ｆ（9.000000000000002）とを、数値データＤ２２の符号部Ｓ（＋）に応じて演算（つまり加算）した演算結果Ａ２０（10.000000000000003）を得る。
【００７９】
ここで、演算結果Ａ２０（10.000000000000003）の有効桁数「１７」は、バッファ領域１０７４の有効桁数「１６」を超えている。よって、加減演算部１０５は、演算結果Ａ２０（10.000000000000003）がバッファの有効桁数の範囲内となるように変換する。実施形態において、加減演算部１０５は、演算結果Ａ２０（10.000000000000003）のうちバッファの有効桁数の範囲から外れる値を繰り上げることにより、演算結果Ａ２０（10.000000000000003）を、繰り上げ後の指数部ｅ「＋００」のデータである値Ａ２０１（0.000000000000001E+00）と、繰り上げ前の指数部ｅ「−１６」のデータである値Ａ２０２（0.000000000000003E-16）と、に分割する。
そして、加減演算部１０５は、演算結果Ａ２０２（0.000000000000003E-16）の仮数部ｆ（0.000000000000003）を、設定指数「−１６」のバッファ領域１０７４に上書き。また、加減演算部１０５は、演算結果Ａ２０１（0.000000000000001E+00）の仮数部ｆ（0.000000000000001）を、設定指数「＋００」のバッファ領域１０７３に書き込む。
【００８０】
次いで、入力値取得部１０２が、入力値として、例えば数値データＤ２３（−1.000000000000000E-15）を取得する。数値データＤ２３（−1.000000000000000E-15）の指数部ｅは「−１５」であるため、バッファ管理部１０３は、数値データＤ２３の指数部ｅがバッファの設定指数の範囲内でないと判定する。この場合、バッファ管理部１０３は、数値データＤ２３の指数部ｅがバッファの設定指数の範囲内となるように、数値データＤ２３を変換する。実施形態において、バッファ管理部１０３は、数値データＤ２３（−1.000000000000000E-15）の指数部ｅを「＋００」とし、数値データＤ２３（−0.000000000000001E+00）に変換する。
そして、選択部１０４は、バッファテーブル１０８を参照して、数値データＤ２３の指数部ｅ「＋００」のバッファ領域１０７３を選択し、選択結果を加減演算部１０５に出力する。加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７３に格納されている値（0.000000000000001）を読み出し、読み出した値と変換後の数値データＤ２３の仮数部ｆ（0.000000000000001）とを、数値データＤ２３の符号部Ｓ（−）に応じた演算（例えば減算）した演算結果Ａ２１（0.000000000000000）を、バッファ領域１０７３に上書きする。
【００８１】
そして、出力決定部１０６は、バッファ領域１０７３〜１０６４に格納されている情報に基づき、出力値を決定する。実施形態において、出力決定部１０６は、バッファ領域１０７４に記憶されている情報に基づき、出力値（3.00000000000000E-31）を出力する。
【００８２】
一方、実施例２のように、バッファ領域の有効桁数を超えた場合に、上位の設定指数のバッファ領域への繰り上げを行わない場合、バッファ領域の有効桁数を超えた値の情報の一部がバッファ領域に記憶されない。図示の例では、設定指数「−１６」のバッファ領域の情報の一部（0.000000000000003E-16）が切り捨てられてしまう場合がある。この場合、数値データＤ２１〜Ｄ２３を加減した結果は、（0.00000000000000E+00）となる。
実施例２に示す通り、演算部１００は、設定指数に対応するバッファ領域毎に入力値の加減算結果を記憶しておき、バッファ領域毎の演算結果がバッファ領域の有効桁数を超えた場合、上位の設定指数のバッファ領域に繰り上げを行うことができる。よって、演算部１００は、バッファ領域の有効桁数に対応できない値も、演算結果としてバッファ領域に格納することができる。従って、演算結果の精度をさらに高めることができる。
【００８３】
（実施例３）
次に、図１３を参照して、演算部１００による実施例３について説明する。図１３は、演算部１００による実施例３について説明するための参照図である。実施例３では、何らの入力値もない状態において、数値データＤ３１〜Ｄ２３が、この順番に入力値取得部１０２により取得された例について説明する。
はじめに、入力値取得部１０２が、入力値として、例えば数値データＤ３１（2.000000000000000）を取得する。バッファ管理部１０３は、バッファテーブル１０８を参照して、数値データＤ３１を、バッファ領域に応じた指数で示す浮動小数点形式の値に変換する。つまり、バッファ管理部１０３は、数値データＤ３１（2.000000000000000）を、数値データＤ３１（2.000000000000000E+00）に変換する。バッファ管理部１０３は、数値データＤ３１の指数部ｅ「＋００」に基づき、設定指数「＋００」に対応するバッファ領域として、バッファ領域１０７３を追加する。選択部１０４は、バッファテーブル１０８を参照して、バッファ管理部１０３により追加された設定指数「＋００」のバッファ領域１０７３を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７３に数値データＤ３１の仮数部ｆ（2.000000000000000）を書き込む。
【００８４】
次いで、入力値取得部１０２が、入力値として、例えば数値データＤ３２（-0.999999999999999）を取得する。バッファ管理部１０３は、バッファテーブル１０８を参照して、数値データＤ３２を、バッファ領域に応じた指数で示す浮動小数点形式の値に変換する。つまり、バッファ管理部１０３は、数値データＤ３２（-0.999999999999999）を、数値データＤ３２（-0.999999999999999E+00）に変換する。選択部１０４は、バッファテーブル１０８を参照して、指数部ｅ「＋００」に基づき、設定指数「＋００」のバッファ領域１０７３を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７３に格納されている値（2.000000000000000）を読み出し、読み出した値と数値データＤ３２の仮数部ｆ（0.999999999999999）とを、数値データＤ３２の符号部Ｓ（−）に応じて演算（つまり減算）した演算結果Ａ３０（1.0000000000000001）を得る。
【００８５】
ここで、演算結果Ａ３０（1.0000000000000001）の有効桁数「１７」は、バッファ領域１０７３の有効桁数「１６」を超えている。よって、加減演算部１０５は、演算結果Ａ３０（1.0000000000000001）がバッファの有効桁数の範囲内となるように変換する。実施形態において、加減演算部１０５は、演算結果Ａ３０（1.0000000000000001）のうちバッファの有効桁数の範囲から外れる値を繰り下げることにより、演算結果Ａ３０（1.0000000000000001）を、繰り下げ後の指数部ｅ「−１６」のデータである値Ａ３０１（1.000000000000000E-16）と、繰り下げ前の指数部ｅ「＋００」のデータである値Ａ３０２（1.000000000000000E+00）と、に分割する。
そして、加減演算部１０５は、演算結果Ａ３０２（1.000000000000000E+00）の仮数部ｆ（1.000000000000000）を、設定指数「＋００」のバッファ領域１０７３に上書き。また、加減演算部１０５は、演算結果Ａ３０１（1.000000000000000E-16）の仮数部ｆ（1.000000000000000）を、設定指数「−１６」のバッファ領域１０７４に書き込む。
【００８６】
次いで、入力値取得部１０２が、入力値として、例えば数値データＤ３３（−1.000000000000000）を取得する。バッファ管理部１０３は、バッファテーブル１０８を参照して、数値データＤ３３を、バッファ領域に応じた指数で示す浮動小数点形式の値に変換する。つまり、バッファ管理部１０３は、数値データＤ３３（−1.000000000000000）を、数値データＤ３２（−1.000000000000000E+00）に変換する。選択部１０４は、バッファテーブル１０８を参照して、数値データＤ３３の指数部ｅ「＋００」のバッファ領域１０７３を選択し、選択結果を加減演算部１０５に出力する。加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７３に格納されている値（1.000000000000000）を読み出し、読み出した値と変換後の数値データＤ３３の仮数部ｆ（1.000000000000000）とを、数値データＤ３３の符号部Ｓ（−）に応じた演算（例えば減算）した演算結果Ａ３１（0.000000000000000）を、バッファ領域１０７３に上書きする。
【００８７】
そして、出力決定部１０６は、バッファ領域１０７３〜１０６４に格納されている情報に基づき、出力値を決定する。実施形態において、出力決定部１０６は、バッファ領域１０７４に記憶されている情報に基づき、出力値（1.000000000000000E-16）を出力する。
【００８８】
一方、実施例３のように、バッファ領域の有効桁数を超えた場合に、下位の設定指数のバッファ領域への繰り下げを行わない場合、バッファ領域の有効桁数を超えた値の情報の一部がバッファ領域に記憶されない。図示の例では、設定指数「＋００」のバッファ領域の情報の一部（0.000000000000001E+00）が切り捨てられてしまう場合がある。この場合、数値データＤ３１〜Ｄ３３を加減した結果は、（0.00000000000000E+00）となる。
実施例３に示す通り、演算部１００は、設定指数に対応するバッファ領域毎に入力値の加減算結果を記憶しておき、バッファ領域毎の演算結果がバッファ領域の有効桁数を超えた場合、下位の設定指数のバッファ領域に繰り下げを行うことができる。よって、演算部１００は、バッファ領域の有効桁数に対応できない値も、演算結果としてバッファ領域に格納することができる。従って、演算結果の精度をさらに高めることができる。
【００８９】
（実施例４）
次に、図１４を参照して、演算部１００による実施例４について説明する。図１４は、演算部１００による実施例４について説明するための参照図である。実施例４では、何らの入力値もない状態において、数値データＤ４１〜Ｄ４３が、この順番に入力値取得部１０２により取得された例について説明する。
はじめに、入力値取得部１０２が、入力値として、例えば数値データＤ４１（1.00000000000001E-16）を取得する。バッファ管理部１０３は、数値データＤ４１の指数部ｅ「−１６」に基づき、設定指数「−１６」に対応するバッファ領域として、バッファ領域１０７４を追加する。選択部１０４は、バッファテーブル１０８を参照して、バッファ管理部１０３により追加された設定指数「−１６」のバッファ領域１０７４を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７４に数値データＤ４１の仮数部ｆ（1.00000000000001）を書き込む。
【００９０】
次いで、入力値取得部１０２が、入力値として、例えば数値データＤ４２（2.00000000000002E-32）を取得する。バッファ管理部１０３は、バッファテーブル１０８を参照して、数値データＤ４２の指数部ｅ「−３２」に対応するバッファ領域が用意されているか否かを判定する。指数部ｅ「−３２」に対応するバッファ領域が用意されていないと判定した場合、バッファ管理部１０３は、数値データＤ４２の指数部ｅ「−３２」に対応するバッファ領域を追加する。これにより、選択部１０４は、バッファテーブル１０８を参照して、数値データＤ４２の指数部ｅ「−３２」に基づき、設定指数「−３２」のバッファ領域１０７５を選択し、選択結果を加減演算部１０５に出力する。そして、加減演算部１０５は、選択部１０４により選択されたバッファ領域１０７５に、数値データＤ４２の仮数部ｆ（2.00000000000002）を書き込む。
【００９１】
一方、取得した入力値の指数部ｅに対応するバッファ領域を追加しない場合、バッファ領域に対応しない入力値は加減演算されないこととなる。図示の例では、指数部ｅ「−３２」の数値データＤ４２が全て切り捨てられてしまう場合がある。この場合、数値データＤ４１〜Ｄ４３を加減した結果は、（0.00000000000000E+00）となる。
実施例４に示す通り、取得した入力値の指数部ｅに対応するバッファ領域が用意されていない場合、バッファ管理部１０３は、取得した入力値の指数部ｅに対応するバッファ領域を追加することができる。よって、演算部１００は、誤差として削除され得る小さい値も、演算結果としてバッファ領域に格納することができる。従って、演算結果の精度をさらに高めることができる。
【００９２】
（実施例５）
次に、図１５を参照して、演算部１００による実施例５について説明する。図１５は、演算部１００による実施例５について説明するための参照図である。実施例５では、何らの入力値もない状態において、数値データＤ１１〜Ｄ１５が、この順番に入力値取得部１０２により取得された例について説明する。詳細については、実施例１と同じであるため、説明を省略する。
図示に示す通り、数値データＤ１１〜Ｄ１３を加減演算した後、演算部１００の処理が中断され、その後、再開されたとする。この場合、演算部１００は、バッファ領域１０７３〜１０６５に記憶された情報を用いて、数値データＤ１１〜Ｄ１３の演算結果に対して、数値データＤ１４〜Ｄ１５を加減演算することができる。従って、演算処理が途中で中断し、再開された場合であっても、演算結果の精度を維持することができる。
【００９３】
なお、実施形態において、バッファ領域１０７１〜１０７５のバッファサイズは固定である例について説明したが、これに限られない。例えば、バッファ管理部１０３は、バッファ部のメモリ残量に応じて、追加するバッファ領域１０７１〜１０７５のバッファサイズを変更してもよい。これにより、バッファ部１０７のメモリ残量が少ない場合、バッファ管理部１０３は、追加するバッファ領域１０７１〜１０７５のそれぞれのバッファサイズを小さくして、入力値の指数部ｅに応じた新たなバッファ領域を追加することが可能になる。
【００９４】
また、実施形態において、加減演算部１０５は、加算と減算の両方の演算を一項する機能部として説明したが、これに限らない。例えば、加減演算部１０５は、加算、又は、減算の一方のみを実行する機能部であってもよい。
【００９５】
なお、上述した実施形態における制御部１０１の一部、例えば、入力値取得部１０２と、バッファ管理部１０３と、選択部１０４と、加減演算部１０５と、出力決定部１０６と、をコンピュータで実現するようにしても良い。その場合、この制御機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現しても良い。なお、ここでいう「コンピュータシステム」とは、演算部１００に内蔵されたコンピュータシステムであって、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでも良い。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【００９６】
また、上述した実施形態における制御部１０１の一部、または全部を、ＬＳＩ（Large Scale Integration）等の集積回路として実現しても良い。制御部１０１の各機能ブロックは個別にプロセッサ化してもよいし、一部、または全部を集積してプロセッサ化しても良い。また、集積回路化の手法はＬＳＩに限らず専用回路、または汎用プロセッサで実現しても良い。また、半導体技術の進歩によりＬＳＩに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いても良い。
【００９７】
以上、本発明を実施するための形態について実施形態を用いて説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【符号の説明】
【００９８】
１０  浮動小数点演算装置
１１  部分処理部
１２  全体処理部
１００  演算部
１０１  制御部
１０２  入力値取得部
１０３  バッファ管理部
１０４  選択部
１０５  加減演算部
１０６  出力決定部
１０７  バッファ部
１０７１  バッファ領域
１０７２  バッファ領域
１０７３  バッファ領域
１０７４  バッファ領域
１０７５  バッファ領域
１０８  バッファテーブル
【図１】
2015232833.tif 000007
【図２】
2015232833.tif 000008
【図３】
2015232833.tif 000009
【図４】
2015232833.tif 000010
【図５】
2015232833.tif 000011
【図６】
2015232833.tif 000012
【図７】
2015232833.tif 000013
【図８】
2015232833.tif 000014
【図９】
2015232833.tif 000015
【図１０】
2015232833.tif 000016
【図１１】
2015232833.tif 000017
【図１２】
2015232833.tif 000018
【図１３】
2015232833.tif 000019
【図１４】
2015232833.tif 000020
【図１５】
2015232833.tif 000021