"所定の丸めモードで基数変換を行うコンピュータが,第1の基数を用いて表される第1の数値を第2の基数を用いて第1の精度で表した第2の数値について,前記第1の数値を前記第2の基数を用いて前記第1の精度よりも高い第2の精度で表した第3の数値を基準とした誤差を算出し,前記誤差の正負が,指定された丸めモードに基づいて前記第1の数値に適用される丸めの方向の正負と一致しない場合に,前記第2の数値に対して,前記丸めの方向に前記第2の精度に対応する丸め幅の補正を行うことを特徴とする数値丸め方法。前記丸めモードは,所定の数値範囲毎に丸めの方向を定めたルールであることを特徴とする請求項1に記載の数値丸め方法。所定の丸めモードで基数変換を行うコンピュータに,第1の基数を用いて表される第1の数値を第2の基数を用いて第1の精度で表した第2の数値について,前記第1の数値を前記第2の基数を用いて前記第1の精度よりも高い第2の精度で表した第3の数値を基準とした誤差を算出し,前記誤差の正負が,指定された丸めモードに基づいて前記第1の数値に適用される丸めの方向の正負と一致しない場合に,前記第2の数値に対して,前記丸めの方向に前記第2の精度に対応する丸め幅の補正を行う処理を実行させるための数値丸めプログラム。前記丸めモードは,所定の数値範囲毎に丸めの方向を定めたルールであることを特徴とする請求項3に記載の数値丸めプログラム。所定の丸めモードで基数変換を行うコンピュータであって,第1の基数を用いて表される第1の数値を第2の基数を用いて第1の精度で表した第2の数値について,前記第1の数値を前記第2の基数を用いて前記第1の精度よりも高い第2の精度で表した第3の数値を基準とした誤差を算出し,前記誤差の正負が,指定された丸めモードに基づいて前記第1の数値に適用される丸めの方向の正負と一致しない場合に,前記第2の数値に対して,前記丸めの方向に前記第2の精度に対応する丸め幅の補正を行う処理をコンピュータに実行させるための数値丸めプログラムを含むライブラリプログラムが格納されたライブラリ記憶部と,丸めモードを指定する命令文を含むソースプログラムを入力し,入力したソースプログラムを解析することにより前記ライブラリ記憶部に格納されている数値丸めプログラムを含むライブラリプログラムを呼び出す命令が記述されたオブジェクトプログラムを出力するコンパイル部とを備えることを特徴とするコンピュータ。前記丸めモードは,所定の数値範囲毎に丸めの方向を定めたルールであることを特徴とする請求項5に記載のコンピュータ。所定の丸めモードで基数変換を行うコンピュータに,丸めモードを指定する命令文を含むソースプログラムを入力し,入力したソースプログラムを解析することにより,ライブラリ記憶部に格納されている,第1の基数を用いて表される第1の数値を第2の基数を用いて第1の精度で表した第2の数値について,前記第1の数値を前記第2の基数を用いて前記第1の精度よりも高い第2の精度で表した第3の数値を基準とした誤差を算出し,前記誤差の正負が,指定された丸めモードに基づいて前記第1の数値に適用される丸めの方向の正負と一致しない場合に,前記第2の数値に対して,前記丸めの方向に前記第2の精度に対応する丸め幅の補正を行う処理をコンピュータに実行させるための数値丸めプログラムを含むライブラリプログラムを呼び出す命令が記述されたオブジェクトプログラムを出力する処理を実行させるためのコンパイルプログラム。前記丸めモードは,所定の数値範囲毎に丸めの方向を定めたルールであることを特徴とする請求項7に記載のコンパイルプログラム。数値の丸め方法を制御する際には,浮動小数点レジスタで設定されている丸めモードを変更する。浮動小数点レジスタは,ハードウェアのアーキテクチャによって,構造が異なる。例えば,あるハードウェアAの浮動小数点レジスタでは,浮動小数点レジスタ内で丸めモードを指すビット位置が,64ビット中の3334ビット目であるものとする。また,別のハードウェアBの浮動小数点レジスタでは,浮動小数点レジスタ内で丸めモードを指すビット位置が,32ビット中の1819ビット目であるものとする。この場合,ハードウェアAとハードウェアBとで浮動小数点レジスタの構造が異なっているため,丸めモードを操作する処理を,ハードウェアAとハードウェアBとでは共通化することはできない。このように,丸めモードを操作するためには,ハードウェアに依存する処理が必要であり,丸めモードを操作する処理を異なるハードウェア間で流用することができない,という問題がある。また,すべてのハードウェアがすべての丸めモードをサポートしているわけではない。そのため,ハードウェアで対応していない丸めモードを実装することができない,という問題がある。一側面では,本発明は,ハードウェアに設定された丸めモードとは異なる丸めモードに従った丸め結果を得ることが可能となる技術を提供することを目的とする。1態様では,数値丸め方法は,所定の丸めモードで基数変換を行うコンピュータが,第1の基数を用いて表される第1の数値を第2の基数を用いて第1の精度で表した第2の数値について,第1の数値を第2の基数を用いて第1の精度よりも高い第2の精度で表した第3の数値を基準とした誤差を算出し,誤差の正負が,指定された丸めモードに基づいて第1の数値に適用される丸めの方向の正負と一致しない場合に,第2の数値に対して,丸めの方向に第2の精度に対応する丸め幅の補正を行う。1態様では,ハードウェアに設定された丸めモードとは異なる丸めモードに従った丸め結果を得ることが可能となる。以下,本実施の形態について,図を用いて説明する。変換対象数値に対する基数変換を行う際に,指定された精度で基数変換の結果を丸める必要がある。例えば,10進数で表される変換対象数値を2進数の値に基数変換する際に,基数変換の結果を4バイトの浮動小数点数で表すように指定されていれば,4バイトの浮動小数点数で表しきれない部分について,丸め処理が行われる。コンピュータで浮動小数点数の丸め処理を行う方法としては,例えば,浮動小数点演算の標準規格であるIEEE754で丸めモードが定義されている。浮動小数点数の丸めモードには,特定の方向の値に丸める方向丸めや,最近の値に丸める最近接丸めなどがある。浮動小数点数の演算は,演算速度が遅いため,ハードウェアで演算を行う場合が多い。このとき,演算結果を特定の丸めモードを指定して丸める場合には,浮動小数点レジスタで設定されている丸めモードを変更して演算を行う必要がある。しかし,浮動小数点レジスタは,ハードウェアのアーキテクチャによって構造が異なるため,丸めモードを操作する処理を,アーキテクチャが異なるハードウェア間で流用することができないという問題がある。また,すべてのハードウェアがすべての丸めモードをサポートしているわけではなく,ハードウェアがサポートしていない丸めモードに対応することはできないという問題もある。また,浮動小数点レジスタで設定されている丸めモードを変更する場合,同一スレッドで行われる別の処理に対しても影響を及ぼすという問題がある。複数のファイルに対して読み書きを行うプログラムの場合,ファイル単位に丸めモードを指定してそれぞれのファイルへの読み書きが繰り返されると,丸めモードを変更するレジスタの読み書きが頻繁に発生するため,性能低下が懸念される。以下では,基数変換で生じる誤差の丸めについて,ハードウェアに依存することなく,指定された丸めモードに従った丸め結果を得ることが可能となる,本実施の形態の技術について説明する。本実施の形態の技術は,所定の丸めモードで基数変換を行うコンピュータが,第1の基数を用いて表される第1の数値を第2の基数を用いて第1の精度で表した第2の数値について,第1の数値を第2の基数を用いて第1の精度よりも高い第2の精度で表した第3の数値を基準とした誤差を算出し,誤差の正負が,指定された丸めモードに基づいて第1の数値に適用される丸めの方向の正負と一致しない場合に,第2の数値に対して,該丸めの方向に第2の精度に対応する丸め幅の補正を行う数値丸めに関する技術である。ここで,丸めモードは,所定の数値範囲毎に丸めの方向を定めたルールである。例えば,第1の基数が10進数であり,第1の数値がAであれば,第1の基数を用いて表される第1の数値は,10進数で表された数値Aである。さらに,例えば,第2の基数が2進数であり,第1の精度が4バイトの浮動小数点数の精度であり,第2の数値がBであれば,第2の基数を用いて第1の精度で表した第2の数値は,2進数の4バイトの浮動小数点数で表された数値Bである。上記によると,数値Bは,数値Aを10進数から2進数に基数変換し,結果を4バイトの浮動小数点数に丸めた値となる。さらに,例えば,第2の精度が8バイトの浮動小数点数の精度であり,第3の数値がCであれば,第2の基数を用いて第2の精度で表した第3の数値は,2進数の8バイトの浮動小数点数で表された数値Cである。上記によると,数値Cは,数値Aを10進数から2進数に基数変換し,結果を8バイトの浮動小数点数に丸めた値となる。このとき,例えば,上記の誤差は,B-Cとなる。この誤差の正負が,実際にコンピュータが基数変換で行った丸めの方向である。ここで,誤差B-Cの正負が,指定された丸めモードに基づいて第1の数値Aに適用される丸めの方向の正負と一致しない場合に,第2の数値Bに対して,該丸めの方向に第2の精度に対応する丸め幅の補正が行われる。以下では,このような本実施の形態の技術の例について説明する。図1は,本実施の形態による数値丸め部の構成例を示す図である。数値丸め部10は,数値の基数変換時において,指定された丸めモードに応じた数値の丸めを行う。例えば,数値丸め部10は,基数変換の対象となる数値の情報を入力し,指定された丸めモードで丸めが行われた基数変換の結果を出力する。数値丸め部10は,第2精度基数変換部11,第2精度結果記憶部12,第1精度基数変換部13,第1精度結果記憶部14,誤差算出部15,誤差記憶部16,丸め方向判定部17,丸め結果補正部18を備える。第2精度基数変換部11は,変換対象数値を,指定された第1の精度より高い第2の精度で基数変換する。第2精度基数変換部11は,得られた第2の精度で基数変換した結果を,第2精度結果記憶部12に記憶する。第2精度結果記憶部12は,第2の精度で基数変換した結果を記憶する,コンピュータがアクセス可能なメモリ等の記憶部である。第1精度基数変換部13は,第2の精度で基数変換した結果を第1の精度で丸める。第1精度基数変換部13は,第2の精度で基数変換した結果を第1の精度で丸める処理を,ハードウェア処理で行う。このとき,第1精度基数変換部13は,浮動小数点レジスタの丸めモードの設定変更を行わない。第2の精度で基数変換した結果を第1の精度で丸めた結果は,変換対象数値を,指定された第1の精度で基数変換した結果を示す。第1精度基数変換部13は,得られた第1の精度で丸めた結果を,第1精度結果記憶部14に記憶する。第1精度結果記憶部14は,第1の精度で丸めた結果を記憶する,コンピュータがアクセス可能なメモリ等の記憶部である。例えば,10進数で表される変換対象数値を,2進数の浮動小数点数に基数変換するものとする。また,基数変換の結果は,4バイトの実数で表すように指定されているものとする。指定された4バイトの実数の精度が,指定された第1の精度となる。このとき,第2精度基数変換部11は,例えば,基数変換の結果が指定された4バイトの実数より精度が高い8バイトの実数で表されるように,基数変換を行う。指定された4バイトの実数より精度が高い8バイトの実数の精度が,第2の精度となる。第1精度基数変換部13は,8バイトの実数で表される基数変換の結果を,4バイトの実数に丸める。誤差算出部15は,第2の精度で基数変換した結果を第1の精度で丸めた結果と,第2の精度で基数変換した結果との誤差を算出する。算出された誤差は,第2の精度で基数変換した結果を第1の精度で丸めたときの丸め誤差となる。誤差算出部15は,得られた誤差を,誤差記憶部16に記憶する。誤差記憶部16は,第2の精度で基数変換した結果を第1の精度で丸めたときの誤差を記憶する,コンピュータがアクセス可能なメモリ等の記憶部である。例えば,上記の例において,誤差算出部15は,8バイトの実数で表される基数変換の結果を4バイトの実数に丸めた結果から,8バイトの実数で表される基数変換の結果を差し引き,誤差を算出する。丸め方向判定部17は,誤差の符号から判断される第1の精度で丸めた結果における丸めの方向が,指定された丸めモードに従った丸めの方向に一致するかを判定する。丸めが行われたときの結果は,正の方向に丸められた値か,負の方向に丸められた値かの2パターンに収束する。第2の精度で基数変換した結果は,第1の精度で丸めた結果よりも元の変換対象数値に近い値であるので,算出された誤差の符号は,第1の精度で丸めた結果における丸めの方向を表している。例えば,誤差が,第1の精度で丸めた結果から第2の精度で基数変換した結果を差し引いて得られるものとする。このとき,誤差の符号が正であれば,第1の精度で丸めた結果における丸めの方向は,正の方向であり,誤差の符号が負であれば,第1の精度で丸めた結果における丸めの方向は,負の方向である。なお,誤差が第2の精度で基数変換した結果から第1の精度で丸めた結果を差し引いて得られる場合には,誤差の符号と第1の精度で丸めた結果における丸めの方向との関係は,逆の関係となる。上述したように,本実施の形態による第1精度基数変換部13は,第2の精度で基数変換した結果を第1の精度で丸める処理を,ハードウェアの丸めモードの設定変更を行わずに実行する。すなわち,第1の精度で丸めた結果における丸めの方向は,第2の精度で基数変換した結果が第1の精度で丸められたときに,実際にハードウェアで丸められた方向が正の方向であったのか負の方向であったのかを示している。これに対して,指定された丸めモードに従った丸めの方向は,第2の精度で基数変換した結果を第1の精度で丸める処理を,指定された丸めモードに従って行った場合の丸めの方向を示す。第1の精度で丸めた結果における丸めの方向が指定された丸めモードに従った丸めの方向に一致するか否かは,誤差の符号や第1の精度で丸めた結果の符号などに基づいた,丸めモードに応じたアルゴリズムを用いて判定することができる。丸め結果補正部18は,第1の精度で丸めた結果における丸めの方向が,指定された丸めモードに従った丸めの方向に一致しない場合に,誤差の符号と第1の精度で丸めた結果の符号との関係から,第1の精度で丸めた結果を補正する。補正は,第1の精度で丸めた結果が指定された丸めモードに応じた値となるように,第1の精度で丸めた結果における丸めの方向を反対方向に変更した丸め結果に,第1の精度で丸めた結果を更新することを意味する。第1の精度で丸めた結果における丸めの方向が分かれば,その反対方向に丸めが行われた場合の丸め結果も,第1の精度で丸めた結果の浮動小数点数をインクリメントまたはデクリメントすることで,容易に得ることができる。ただし,2進数の浮動小数点数で表される値をインクリメントまたはデクリメントした補正の結果は,その値の符号の正負によって,正の方向への補正であるか負の方向への補正であるかが異なる。丸め結果補正部18は,誤差の符号と第1の精度で丸めた結果の符号との関係に応じて,第1の精度で丸めた結果をインクリメントまたはデクリメントする補正を行う。図2は,本実施の形態による丸め結果の符号と誤差の符号との組合せに対応する丸め結果の補正処理を示す図である。図2において,丸め結果の符号は,第1の精度で丸めた結果の符号を示す。誤差の符号は,第1の精度で丸めた結果から第2の精度で基数変換した結果を差し引いて算出された誤差の符号を示す。処理は,第1の精度で丸めた結果に対する補正処理を示す。例えば,第1の精度で丸めた結果から第2の精度で基数変換した結果を差し引いて誤差が算出される場合に,算出された誤差の符号が正であれば,第1の精度で丸めた結果における丸めの方向は正の方向である。それが指定された丸めモードに従った丸めの方向に一致しなかった場合,丸め結果補正部18は,第1の精度で丸めた結果を,反対の負の方向に丸めた結果に更新する補正を行う。このとき,丸め結果補正部18は,図2に示すように,第1の精度で丸めた結果の符号が正であれば,第1の精度で丸めた結果をデクリメントし,第1の精度で丸めた結果の符号が負であれば,第1の精度で丸めた結果をインクリメントする補正を行う。また,例えば,第1の精度で丸めた結果から第2の精度で基数変換した結果を差し引いて誤差が算出される場合に,算出された誤差の符号が負であれば,第1の精度で丸めた結果における丸めの方向は負の方向である。それが指定された丸めモードに従った丸めの方向に一致しなかった場合,丸め結果補正部18は,第1の精度で丸めた結果を,反対の正の方向に丸めた結果に更新する補正を行う。このとき,丸め結果補正部18は,図2に示すように,第1の精度で丸めた結果の符号が正であれば,第1の精度で丸めた結果をインクリメントし,第1の精度で丸めた結果の符号が負であれば,第1の精度で丸めた結果をデクリメントする補正を行う。ここで,丸めモードに応じた,本実施の形態の丸め方向判定部17と丸め結果補正部18による処理の例を説明する。上述したように,浮動小数点数の丸めモードには,特定の方向の値に丸める方向丸めや,最近の値に丸める最近接丸めなどがある。以下では,方向丸めとしてUP,DOWN,ZEROの3つの丸めモードが,最近接丸めとしてNEAREST,COMPATIBLEの2つの丸めモードがあるものとして,説明を行う。なお,以下の説明において,誤差は,丸めた結果から丸める前の元の値を差し引いて算出される値であるものとする。例えば,本実施の形態の例では,誤差は,第1の精度で丸めた結果から第2の精度で基数変換した結果を差し引いて算出される値となる。誤差が第2の精度で基数変換した結果から第1の精度で丸めた結果を差し引いて算出された値である場合には,以下の説明における誤差の符号の取り扱いを逆にする必要がある。まず,指定された丸めモードが方向丸めである場合の例について説明する。指定された丸めモードが方向丸めである場合には,丸め方向判定部17は,第1の精度で丸めた結果の符号や誤差について,指定された丸めモードの定義に一致するかを判定する。第1の精度で丸めた結果の符号や誤差について,指定された丸めモードの定義に一致しない場合には,丸め方向判定部17は,第1の精度で丸めた結果における丸めの方向が,指定された丸めモードに従った丸めの方向に一致しないと判定する。このとき,丸め結果補正部18は,誤差の符号と第1の精度で丸めた結果の符号との関係から,第1の精度で丸めた結果を,第1の精度で丸めた結果における丸めの方向を反対方向に変更した丸め結果に更新する補正を行う。本実施の形態において,UPは,正の無限大方向に丸めを行う丸めモードを示す。UPで丸めが行われた場合には,誤差は,必ず0以上になる。すなわち,誤差の符号が負である場合には,丸めた結果は,UPで丸めが行われた結果ではない。例えば,指定された丸めモードがUPである場合に,算出された誤差の符号が負であれば,丸め方向判定部17は,第1の精度で丸めた結果における丸めの方向が,指定された丸めモードUPに従った丸めの方向に一致しないと判定する。このとき,丸め結果補正部18は,図2に示すように,第1の精度で丸めた結果の符号が正であれば,第1の精度で丸めた結果をインクリメントする補正を行い,第1の精度で丸めた結果の符号が負であれば,第1の精度で丸めた結果をデクリメントする補正を行う。本実施の形態において,DOWNは,負の無限大方向に丸めを行う丸めモードを示す。DOWNで丸めが行われた場合には,誤差は,必ず0以下になる。すなわち,誤差の符号が正である場合には,丸めた結果は,DOWNで丸めが行われた結果ではない。例えば,指定された丸めモードがDOWNである場合に,算出された誤差の符号が正であれば,丸め方向判定部17は,第1の精度で丸めた結果における丸めの方向が,指定された丸めモードDOWNに従った丸めの方向に一致しないと判定する。このとき,丸め結果補正部18は,図2に示すように,第1の精度で丸めた結果の符号が正であれば,第1の精度で丸めた結果をデクリメントする補正を行い,第1の精度で丸めた結果の符号が負であれば,第1の精度で丸めた結果をインクリメントする補正を行う。本実施の形態において,ZEROは,0に近づく方向に丸めを行う丸めモードを示す。ZEROで丸めが行われた場合には,誤差は,丸めた結果と符号が異なる値になるか,0になる。すなわち,誤差の符号と丸めた結果の符号とが一致する場合には,丸めた結果は,ZEROで丸めが行われた結果ではない。例えば,指定された丸めモードがZEROである場合に,算出された誤差の符号と第1の精度で丸めた結果の符号とが一致すれば,丸め方向判定部17は,第1の精度で丸めた結果における丸めの方向が,指定された丸めモードZEROに従った丸めの方向に一致しないと判定する。このとき,丸め結果補正部18は,図2に示すように,第1の精度で丸めた結果をデクリメントする補正を行う。次に,指定された丸めモードが最近接丸めである場合の例について説明する。最近接丸めにおいて,NEARESTとCOMPATIBLEは,いずれも,表現できる最も近くの値に丸めを行う丸めモードを示す。すなわち,NEARESTとCOMPATIBLEは,いずれも誤差が小さくなる方向への丸めを行う丸めモードである。ただし,NEARESTとCOMPATIBLEでは,丸める前の元の値が丸め結果として表現可能な2つの値の中間値であった場合の処理が異なる。すなわち,NEARESTとCOMPATIBLEでは,丸める前の元の値と丸め結果として表現可能な2つの値との間の誤差の絶対値が同じになる場合の処理が異なる。NEARESTでは,丸める前の元の値が丸め結果として表現可能な2つの値の中間値である場合に,丸め結果が偶数となる方向への丸めが行われる。すなわち,丸め結果が浮動小数点数で表現される場合には,丸め結果の最下位ビットが0になるように丸め処理が行われる。これに対して,COMPATIBLEでは,丸める前の元の値が丸め結果として表現可能な2つの値の中間値である場合に,0から離れる方向への丸めが行われる。NEARESTとCOMPATIBLEとの違いを,具体例で説明する。ここでは,分かりやすく説明するために,10進数の例を用いて説明を行う。例えば,10進数の値2.2を整数に丸める例を考える。丸め結果として表現可能な2つの値は,2または3である。2つの値のうち,元の値2.2との誤差が小さくなるのは2であるので,丸めモードがNEARESTである場合でも,COMPATIBLEである場合でも,ともに丸め結果は2となる。また,例えば,10進数の値2.5を整数に丸める例を考える。丸め結果として表現可能な2つの値は,2または3である。元の値2.5と2つの値との誤差は,ともに等しい0.5となる。このとき,丸めモードがNEARESTである場合には,丸め結果が偶数になるように値の丸めが行われる。丸めモードがNEARESTである場合の丸め結果は,2となる。これに対して,丸めモードがCOMPATIBLEである場合には,丸め結果が0から遠くなるように値の丸めが行われる。丸めモードがCOMPATIBLEである場合の丸め結果は,3となる。指定された丸めモードが最近接丸めである場合には,丸め方向判定部17は,第1の精度で丸めた結果における丸めの方向を反対方向に変更した,もう1つのパターンの丸め結果を求める。ここでは,第1の精度で丸めた結果における丸めの方向を反対方向に変更した,もう1つのパターンの丸め結果を,反対方向丸め結果と呼ぶ。丸め方向判定部17は,図2に示すように,第1の精度で丸めた結果の符号と誤差の符号との関係に基づいて,第1の精度で丸めた結果の浮動小数点数をインクリメントまたはデクリメントすることで,反対方向丸め結果を得ることができる。丸め方向判定部17は,反対方向丸め結果と第2の精度で基数変換した結果との誤差を求める。丸め方向判定部17は,第1の精度で丸めた結果と第2の精度で基数変換した結果との誤差の絶対値と,反対方向丸め結果と第2の精度で基数変換した結果との誤差の絶対値とを比較する。丸め方向判定部17は,誤差の絶対値が小さい方の丸め結果における丸めの方向を,指定された丸めモードに従った丸めの方向と判断する。なお,双方の誤差の絶対値が一致する場合には,丸め方向判定部17は,指定された丸めモードに応じた判断を行う。例えば,指定された丸めモードがNEARESTである場合には,丸め方向判定部17は,浮動小数点数の最終ビットが0である丸め結果における丸めの方向を,指定された丸めモードに従った丸めの方向と判断する。また,指定された丸めモードがCOMPATIBLEである場合には,丸め方向判定部17は,浮動小数点数の仮数部の値が大きい方の丸め結果における丸めの方向を,指定された丸めモードに従った丸めの方向と判断する。丸め方向判定部17は,反対方向丸め結果における丸めの方向を指定された丸めモードに従った丸めの方向と判断した場合に,第1の精度で丸めた結果における丸めの方向が,指定された丸めモードに従った丸めの方向に一致しないと判定する。このとき,丸め結果補正部18は,反対方向丸め結果で第1の精度で丸めた結果を更新する補正を行う。丸め方向判定部17で算出された反対方向丸め結果は,誤差の符号と第1の精度で丸めた結果の符号との関係から,第1の精度で丸めた結果における丸めの方向を反対方向に変更した丸め結果である。ここで説明した丸めモードは一例であるので,図1に示す数値丸め部10は,必ずしもこれらの丸めモードのすべてに対応していなくてもよく,いずれか複数に対応できるものであればよい。また,図1に示す数値丸め部10が,ここで説明した丸めモード以外の丸めモードに対応していてもよい。このように,図1に示す数値丸め部10によって,ハードウェアのアーキテクチャに依らずに,指定された丸めモードに従った丸め結果を得ることができる。図3は,本実施の形態による数値丸め部が組み込まれた言語処理装置の構成例を示す図である。図3に示す言語処理装置20は,図1に示す数値丸め部10が組み込まれた装置の一例である。言語処理装置20は,プログラミング言語で記述されたソースプログラム40を翻訳し,コンピュータで実行可能な実行形式プログラム42を生成する。言語処理装置20は,コンパイル部21,リンカ部24,ライブラリ記憶部30を備える。コンパイル部21は,プログラミング言語で記述されたソースプログラム40をコンパイルし,オブジェクトプログラム41を生成するコンパイラである。本実施の形態において,コンパイル部21は,丸めモードを指定する命令文を含むソースプログラム40を入力する。コンパイル部21は,入力したソースプログラムを解析することにより,ライブラリ記憶部30に格納されている,図1に示す数値丸め部10を実現するプログラムを含むライブラリプログラムを呼び出す命令が記述されたオブジェクトプログラム41を出力する。本実施の形態によるコンパイル部21は,丸めモード指定命令解析部22,ライブラリ呼出し命令生成部23を備える。丸めモード指定命令解析部22は,ソースプログラム40に含まれる丸めモードを指定する命令文を解析する。ライブラリ呼出し命令生成部23は,丸めモード指定命令解析部22が解析した結果に従って,ライブラリ記憶部30に格納されたライブラリプログラムを呼び出す命令を,オブジェクトプログラム41内に出力する。リンカ部24は,オブジェクトプログラム41と,ライブラリ記憶部30に格納された各種のライブラリプログラムとを結合し,実行形式プログラム42を生成するリンカである。実行形式プログラム42とライブラリプログラムとのリンクは,動的リンクであってもよいし,静的リンクであってもよい。ライブラリ記憶部30は,汎用性の高い複数のライブラリプログラムを再利用可能な形で記憶する,コンピュータがアクセス可能な記憶部である。本実施の形態によるライブラリ記憶部30には,図1に示す数値丸め部10を実現するプログラムを含むライブラリプログラムが格納されている。ライブラリ記憶部30は,ライブラリプログラムによる処理手段として,例えば,ファイルオープン処理部31,ファイル読み込み処理部32,入力データ解析処理部33,入力値設定処理部34などを備える。ファイルオープン処理部31は,ファイルのデータを読み込むための準備をするOPEN命令を処理する。ファイル読み込み処理部32は,ファイルのデータを読み込む処理を行う。入力データ解析処理部33は,ファイルから読み込まれたデータを解析する処理を行う。入力値設定処理部34は,ファイルから読み込まれたデータを,利用者が指定した丸めモード,すなわちソースプログラム40の命令文で記述された丸めモードに従って加工し,実行形式プログラム42に引き渡す処理を行う。本実施の形態による入力値設定処理部34は,図1に示す数値丸め部10を備え,その数値丸め部10による結果の値を,実行形式プログラム42に返却する。実行形式プログラム42が実行された際に,データの入力処理43では,ファイル読み込み処理部32,入力データ解析処理部33,入力値設定処理部34等を実現するライブラリプログラムが呼び出され,実行される。このとき,入力値設定処理部34を実現するプログラムに含まれる,数値丸め部10を実現するプログラムによる処理が行われる。図3に示す言語処理装置20や,言語処理装置20が備えるコンパイル部21を実現するプログラムによって,図1に示す数値丸め部10を実現するプログラムを含むライブラリプログラムを呼び出して実行する実行形式プログラム42が生成される。これにより,ハードウェアの設定を変更することなく,利用者に指定された丸めモードに従った丸め処理を実行することが可能な実行形式プログラム42の生成が可能となる。図4は,本実施の形態による数値丸め部や言語処理装置を実現するハードウェアの構成例を示す図である。図1に示す数値丸め部10や図3に示す言語処理装置20は,例えば,CPUCentralProcessingUnit2,主記憶となるメモリ3,記憶装置4,通信装置5,媒体読取書込装置6,入力装置7,出力装置8等を備えるコンピュータ1によって実現される。記憶装置4は,例えばHDDHardDiskDriveなどである。媒体読取書込装置6は,例えばCD-RCompactDiscRecordableドライブやDVD-RDigitalVersatileDiscRecordableドライブなどである。入力装置7は,例えばキーボードマウスなどである。出力装置8は,例えばディスプレイ等の表示装置などである。図1に示す数値丸め部10および数値丸め部10が備える各機能部や,図3に示す言語処理装置20および言語処理装置20が備える各機能部は,コンピュータ1が備えるCPU2,メモリ3等のハードウェアと,ソフトウェアプログラムとによって実現することが可能である。コンピュータ1が実行可能なプログラムは,記憶装置4に記憶され,その実行時にメモリ3に読み出され,CPU2により実行される。コンピュータ1は,可搬型記録媒体から直接プログラムを読み取り,そのプログラムに従った処理を実行することもできる。また,コンピュータ1は,サーバコンピュータからプログラムが転送されるごとに,逐次,受け取ったプログラムに従った処理を実行することもできる。さらに,このプログラムは,コンピュータ1で読み取り可能な記録媒体に記録しておくことができる。図5は,本実施の形態によるソースプログラムの例を示す図である。図5に示すソースプログラム40は,Fortranの文法規則に従って記述されたソースプログラム40の例である。図5に示すソースプログラム40には,丸めモードを指定する命令文が含まれている。図5に示すソースプログラム40において,命令文aは,4バイトの実数r1,r2を宣言する命令文である。実数r1,r2は,それぞれ入力値を格納するために使用される。命令文bは,work1.dataというファイルを開き,装置番号1として識別可能な状態にすることを指示する命令文である。命令文bは,このファイルからデータを入出力する場合の丸め方法に,UPの丸めモードを適用することを指示している。また,命令文cは,work2.dataというファイルを開き,装置番号2として識別可能な状態にすることを指示する命令文である。命令文cは,このファイルからデータを入出力する場合の丸め方法に,DOWNの丸めモードを適用することを指示している。命令文dは,装置番号1のファイルから数値を表す文字列のデータを読み込み,実数r1に保持することを指示している。また,命令文eは,装置番号2のファイルから数値を表す文字列のデータを読み込み,実数r2に保持することを指示している。図5に示すソースプログラム40を,図3に示す言語処理装置20のコンパイル部21が入力し,コンパイル処理を行うものとする。図5に示すソースプログラム40の命令文b,cに対して,コンパイル部21は,ライブラリ呼出し命令生成部23によって,それぞれファイルオープン処理部31を呼び出す命令を生成する。このとき,命令文b,cには,丸めモードが指定されているので,丸めモード指定命令解析部22によって解析した丸めモードの情報が,実行形式プログラム42の実行時にファイルオープン処理部31にパラメータとして通知される。ファイルオープン処理部31は,指定されたファイルに対するオープン処理を実行するとともに,指定された丸めモードの情報を記憶する。また,コンパイル部21は,命令文d,eに対して,それぞれライブラリ呼出し命令生成部23によって,ファイル読み込み処理部32,入力データ解析処理部33,入力値設定処理部34を呼び出す命令を生成する。実行形式プログラム42の実行において,命令文d,eに相当する入力処理43の実行時に,本実施の形態の数値丸め部10による処理が実行される。以下,図3に示す実行形式プログラム42に含まれるファイルからデータを入力する入力処理43のフローチャートを例として,本実施の形態の数値丸め部10による処理の流れの例を説明する。図6は,本実施の形態の実行形式プログラムに含まれる入力処理の例を示すフローチャートである。図6に示す実行形式プログラム42に含まれる入力処理43の例では,実行形式プログラム42から呼び出されたファイル読み込み処理部32,入力データ解析処理部33,入力値設定処理部34による処理が行われる。なお,ここでは,ファイルのデータは,10進数を文字列で表現したデータであるものとする。入力処理43では,変換対象数値である10進数のデータを2進数に変換する基数変換が行われる。入力処理43において,ファイル読み込み処理部32は,変換対象数値の取得,すなわち10進数を表す文字列データの読み込みを行うステップS10。例えば,ファイルから入力される文字列データが,10進数を表す123.456789であるものとする。この文字列データでは,小数点を含めて1つ1つの数字が,例えば1バイトの文字コードで表されている。入力データ解析処理部33は,入力された変換対象数値である文字列データを解析する変換対象数値解析処理を実行するステップS11。変換対象数値解析処理では,後の基数変換のための事前処理が行われる。変換対象数値解析処理の詳細については,後述する。入力値設定処理部34の数値丸め部10において,第2精度基数変換部11は,第2精度基数変換処理を実行するステップS12。第2精度基数変換処理では,変換対象数値を,プログラムで指定された第1の精度より高い第2の精度で基数変換する処理が行われる。第2精度基数変換処理の詳細については,後述する。第1精度基数変換部13は,変換対象数値を第2の精度で基数変換した結果を,第1の精度で丸めるステップS13。以下では,変換対象数値を第2の精度で基数変換した結果を,Sとする。Sは,第2の精度で表された2進数の浮動小数点数である。また,第1の精度で丸めた結果を,Yとする。Yは,第2の精度よりも低い第1の精度で表された2進数の浮動小数点数である。例えばYが4バイトの浮動小数点数である場合に,例えばSは8バイトの浮動小数点数である。第2の精度で表されるSを,第1の精度で表されるYに丸める処理は,浮動小数点数の演算となるので,ハードウェアを用いた処理となる。第1精度基数変換部13は,ハードウェアに,Sをプログラムで指定された型の実数Yに丸める命令を行う。誤差算出部15は,第2の精度で基数変換した結果と,その第2の精度で基数変換した結果を第1の精度で丸めた結果との誤差を算出するステップS14。以下では,誤差を,Dとする。ここでは,誤差Dを,Y-Sの演算で求めるものとする。丸め方向判定部17は,D=0であるかを判定するステップS15。D=0である場合にはステップS15のYES,第1の精度で丸めた結果Yの補正は行わない。D=0でない場合にはステップS15のNO,丸め方向判定部17および丸め結果補正部18による丸めモード対応処理を実行するステップS16。丸めモード対応処理では,指定された丸めモードに応じた,第1の精度で丸めた結果における丸めの方向が指定された丸めモードに従ったものであるかを判定する処理や,第1の精度で丸めた結果を補正する処理が行われる。丸めモード対応処理の詳細については,後述する。入力値設定処理部34は,補正も含めた最終的な第1の精度で丸めた結果を入力値として設定しステップS17,呼び出し元の実行形式プログラム42に返却する。図7は,本実施の形態の入力データ解析処理部による変換対象数値解析処理フローチャートである。図7に示す変換対象数値解析処理では,後の基数変換のために,入力されたデータを解析する事前処理が行われる。ここでは,図3に示す入力データ解析処理部33により変換対象数値解析処理が行われる例を示すが,図1に示す第2精度基数変換部11が変換対象数値解析処理を含めた処理を行うようにしてもよい。入力データ解析処理部33は,ファイルから読み込んだ文字列データについて,小数点の位置と,指数表現の指数値とを解析するステップS20。指数表現では,仮数部と指数部との間にeやEなどの記号を挟んで,例えば,2.0×105を2.0e5などと表す。例えば,入力された文字列データが123.456789である場合に,入力データ解析処理部33は,解析によって,小数点が先頭から4文字目の位置にあり,指数表現の指数値がないという情報を得る。入力データ解析処理部33は,入力された文字列データから小数点と指数表現とを除外した文字列cを生成するステップS21。入力データ解析処理部33は,生成された文字列cをメモリに保持する。また,入力データ解析処理部33は,小数点位置を補正する数値eを求めるステップS22。数値eは,次の式が成り立つ値となる。0.[文字列c]×10のe乗=入力された文字列データで表される数値入力データ解析処理部33は,求めた数値eをメモリに保持する。例えば,入力された文字列データが123.456789である場合,文字列cは123456789となり,e=3となる。入力データ解析処理部33は,文字列cの桁数fを求めるステップS23。例えば,文字列cが123456789である場合,桁数f=9である。図8は,本実施の形態の第2精度基数変換部による第2精度基数変換処理フローチャートである。図8に示すフローチャートにおいて,第2精度基数変換部11は,変換対象数値の情報として,図7に示す変換対象数値解析処理により得られた文字列c,数値e,桁数fを用いて,10進数から2進数への基数変換を第2の精度で実行する。なお,図8に示すフローチャートにおいて,文字c[i]i=0,1,...は,文字列cの文字を左から順に表した配列である。第2精度基数変換部11は,2進数の浮動小数点数であるSを0に初期化し,カウンタiを0に初期化するステップS30。第2精度基数変換部11は,i<fであるかを判定するステップS31。ここでは,文字列cにおけるすべての文字について処理が終了したかが判定されている。i<fであればステップS31のYES,第2精度基数変換部11は,文字c[i]を数値xに変換するステップS32。ここでは,文字コードで数字を表す文字c[i]を,2進整数の数値xに変換する。第2精度基数変換部11は,S×10xの演算結果を新たなSとするステップS33。Sの演算は浮動小数点数の演算となるので,ステップS33の処理は,ハードウェアを用いた処理となる。第2精度基数変換部11は,カウンタiをインクリメントしステップS34,ステップS31の処理に戻る。i<fでなければステップS31のNO,第2精度基数変換部11は,Sに10のe-f乗を掛ける演算を行うステップS35。ここでは,文字列cで表されるすべての桁の数値についての処理の終了後に,指数についての処理が行われている。Sの演算は浮動小数点数の演算となるので,ステップS35の処理は,ハードウェアを用いた処理となる。ステップS35の処理で得られたSが,変換対象数値を,指定された第1の精度より高い第2の精度で基数変換した結果となる。図9は,本実施の形態の丸め方向判定部および丸め結果補正部による丸めモード対応処理フローチャートである。図9に示すフローチャートは,プログラムで指定された丸めモードに応じて,第1の精度で丸めた結果における丸めの方向の判定や,第1の精度で丸めた結果の補正を行う処理のフローチャートである。ここでは,プログラムにより指定される丸めモードが,UP,DOWN,ZERO,NEAREST,COMPATIBLEのいずれかであるものとする。丸め方向判定部17は,指定された丸めモードを判定するステップS40。指定された丸めモードがUPである場合にはステップS40のUP,丸め方向判定部17および丸め結果補正部18による,丸めモードUP処理が実行されるステップS41。丸めモードUP処理の詳細については,後述する。指定された丸めモードがDOWNである場合にはステップS40のDOWN,丸め方向判定部17および丸め結果補正部18による,丸めモードDOWN処理が実行されるステップS42。丸めモードDOWN処理の詳細については,後述する。指定された丸めモードがZEROである場合にはステップS40のZERO,丸め方向判定部17および丸め結果補正部18による,丸めモードZERO処理が実行されるステップS43。丸めモードZERO処理の詳細については,後述する。指定された丸めモードがNEARESTである場合にはステップS40のNEAREST,丸め方向判定部17および丸め結果補正部18による,丸めモードNEAREST処理が実行されるステップS44。丸めモードNEAREST処理の詳細については,後述する。指定された丸めモードがCOMPATIBLEである場合にはステップS40のCOMPATIBLE,丸め方向判定部17および丸め結果補正部18による,丸めモードCOMPATIBLE処理が実行されるステップS45。丸めモードCOMPATIBLE処理の詳細については,後述する。図10は,本実施の形態の丸め方向判定部および丸め結果補正部による丸めモードUP処理フローチャートである。図10に示すフローチャートにおいて,Dは,図6のステップS14の処理で算出された誤差である。Yは,図6のステップS13の処理で得られた第1の精度に丸めた結果である。なお,INCYは,浮動小数点数のYをインクリメントした結果を表し,DECYは,浮動小数点数のYをデクリメントした結果を表す。丸め方向判定部17は,D<0であるかを判定するステップS50。D<0でなければステップS50のNO,Yにおける丸めの方向は,指定された丸めモードUPに従った方向である。このとき,数値丸め部10は,Yの補正を行わずに処理を終了する。D<0であればステップS50のYES,Yにおける丸めの方向は,指定された丸めモードUPに従った方向の反対方向である。このとき,丸め結果補正部18は,Yを補正する。丸め結果補正部18は,Y>0であるかを判定するステップS51。Y>0であればステップS51のYES,丸め結果補正部18は,YをINCYで更新する補正を行うステップS52。Y>0でなければステップS51のNO,丸め結果補正部18は,YをDECYで更新する補正を行うステップS53。図11は,本実施の形態の丸め方向判定部および丸め結果補正部による丸めモードDOWN処理フローチャートである。図11に示すフローチャートにおいて,Dは,図6のステップS14の処理で算出された誤差である。Yは,図6のステップS13の処理で得られた第1の精度に丸めた結果である。なお,INCYは,浮動小数点数のYをインクリメントした結果を表し,DECYは,浮動小数点数のYをデクリメントした結果を表す。丸め方向判定部17は,D>0であるかを判定するステップS60。D>0でなければステップS60のNO,Yにおける丸めの方向は,指定された丸めモードDOWNに従った方向である。このとき,数値丸め部10は,Yの補正を行わずに処理を終了する。D>0であればステップS60のYES,Yにおける丸めの方向は,指定された丸めモードDOWNに従った方向の反対方向である。このとき,丸め結果補正部18は,Yを補正する。丸め結果補正部18は,Y>0であるかを判定するステップS61。Y>0であればステップS61のYES,丸め結果補正部18は,YをDECYで更新する補正を行うステップS62。Y>0でなければステップS61のNO,丸め結果補正部18は,YをINCYで更新する補正を行うステップS63。図12は,本実施の形態の丸め方向判定部および丸め結果補正部による丸めモードZERO処理フローチャートである。図12に示すフローチャートにおいて,Dは,図6のステップS14の処理で算出された誤差である。Yは,図6のステップS13の処理で得られた第1の精度に丸めた結果である。なお,DECYは,浮動小数点数のYをデクリメントした結果を表す。丸め方向判定部17は,D>0であるかを判定するステップS70。D>0であればステップS70のYES,丸め方向判定部17は,Y>0であるかを判定するステップS71。Y>0でなければステップS71のNO,Yにおける丸めの方向は,指定された丸めモードZEROに従った方向である。このとき,数値丸め部10は,Yの補正を行わずに処理を終了する。Y>0であればステップS71のYES,Yにおける丸めの方向は,指定された丸めモードZEROに従った方向の反対方向である。このとき,丸め結果補正部18は,Yを補正する。丸め結果補正部18は,YをDECYで更新する補正を行うステップS72。D>0でなければステップS70のNO,丸め方向判定部17は,Y>0であるかを判定するステップS73。Y>0であればステップS73のYES,Yにおける丸めの方向は,指定された丸めモードZEROに従った方向である。このとき,数値丸め部10は,Yの補正を行わずに処理を終了する。Y>0でなければステップS73のNO,Yにおける丸めの方向は,指定された丸めモードZEROに従った方向の反対方向である。このとき,丸め結果補正部18は,Yを補正する。丸め結果補正部18は,YをDECYで更新する補正を行うステップS74。図13は,本実施の形態の丸め方向判定部および丸め結果補正部による丸めモードNEAREST処理フローチャートである。図13に示すフローチャートにおいて,Dは,図6のステップS14の処理で算出された誤差である。Yは,図6のステップS13の処理で得られた第1の精度に丸めた結果である。Sは,図6のステップS12の処理で得られた第2の精度で基数変換された結果である。なお,INCYは,浮動小数点数のYをインクリメントした結果を表し,DECYは,浮動小数点数のYをデクリメントした結果を表す。Y’は,Yにおける丸めの方向を反対方向に変更した,もう1つのパターンの丸め結果を表す。D’は,SからY’への丸め誤差を表す。丸め方向判定部17は,D>0であるかを判定するステップS80。D>0であればステップS80のYES,丸め方向判定部17は,Y>0であるかを判定するステップS81。Y>0であればステップS81のYES,丸め方向判定部17は,DECYの値をY’とするステップS82。Y>0でなければステップS81のNO,丸め方向判定部17は,INCYの値をY’とするステップS83。D>0でなければステップS80のNO,丸め方向判定部17は,Y>0であるかを判定するステップS84。Y>0であればステップS84のYES,丸め方向判定部17は,INCYの値をY’とするステップS85。Y>0でなければステップS84のNO,丸め方向判定部17は,DECYの値をY’とするステップS86。ここまでの処理は,Yにおける丸めの方向を反対方向に変更した,もう1つのパターンの丸め結果Y’を求める処理である。丸め方向判定部17は,誤差D’を,Y’-Sの演算で求めるステップS87。丸め方向判定部17は,|D|=|D’|であるかを判定するステップS88。|D|=|D’|でなければステップS88のNO,丸め方向判定部17は,|D|<|D’|であるかを判定するステップS89。|D|<|D’|であればステップS89のYES,Yにおける丸めの方向は,指定された丸めモードNEARESTに従った方向である。このとき,数値丸め部10は,Yの補正を行わずに処理を終了する。|D|<|D’|でなければステップS89のNO,Yにおける丸めの方向は,指定された丸めモードNEARESTに従った方向の反対方向である。このとき,丸め結果補正部18は,Yを補正する。丸め結果補正部18は,YをY’で更新する補正を行うステップS810。|D|=|D’|であればステップS88のYES,丸め方向判定部17は,Yの浮動小数点数の最下位ビットが0であるかを判定するステップS811。Yの浮動小数点数の最下位ビットが0であればステップS811のYES,Yにおける丸めの方向は,指定された丸めモードNEARESTに従った方向である。このとき,数値丸め部10は,Yの補正を行わずに処理を終了する。Yの浮動小数点数の最下位ビットが0でなければステップS811のNO,Yにおける丸めの方向は,指定された丸めモードNEARESTに従った方向の反対方向である。このとき,丸め結果補正部18は,Yを補正する。丸め結果補正部18は,YをY’で更新する補正を行うステップS812。図14は,本実施の形態の丸め方向判定部および丸め結果補正部による丸めモードCOMPATIBLE処理フローチャートである。図14に示す丸めモードCOMPATIBLE処理におけるステップS90~ステップS910の処理は,基本的に図13に示す丸めモードNEAREST処理におけるステップS80~ステップS810の処理と同じである。ここでは,図14に示す丸めモードCOMPATIBLE処理におけるステップS90~ステップS910の処理の説明を省略し,ステップS911,ステップS912の処理のみ説明する。|D|=|D’|であればステップS98のYES,丸め方向判定部17は,|Y|>|Y’|であるかを判定するステップS911。|Y|>|Y’|であればステップS911のYES,Yにおける丸めの方向は,指定された丸めモードCOMPATIBLEに従った方向である。このとき,数値丸め部10は,Yの補正を行わずに処理を終了する。|Y|>|Y’|でなければステップS911のNO,Yにおける丸めの方向は,指定された丸めモードCOMPATIBLEに従った方向の反対方向である。このとき,丸め結果補正部18は,Yを補正する。丸め結果補正部18は,YをY’で更新する補正を行うステップS912。以下,本実施の形態の数値丸め部10による基数変換の具体的な例を示す。ここでは,ファイルから入力された10進値の123456789を,2進値の変数rに保持する例を説明する。なお,変数rには,4バイトの浮動小数点数で表された2進値が保持されるものとする。数値丸め部10において,第2精度基数変換部11は,変換対象数値123456789を,指定された4バイトの精度より高い8バイトの精度で基数変換した値Sを求める。8バイトの浮動小数点数であるSは,例えば,S=010000000101......というような数値となる。このSを,10進表記すると1234567890000...と表されるような数値となる。このSは,有効桁数の範囲で,ほぼ入力された値に等しいとみなせる。第1精度基数変換部13は,ハードウェア命令により,8バイトの浮動小数点数であるSを,4バイトの浮動小数点数であるYに丸める。このとき,Yは,例えば,Y=01000010111101101110100111100000となる。このYの浮動小数点数において,左側から順に,1ビットが符号部であり,続く8ビットが指数部であり,残りの23ビットが仮数部である。参考のために,この2進値のYを10進表記すると,123456787となる。誤差算出部15は,YとSとの誤差Dを算出する。誤差Dは,10進表記で,D=-0000002となる。丸め方向判定部17,丸め結果補正部18は,指定された丸めモードに応じた処理を行う。<丸めモードがUPの場合>丸めモードがUPの場合,例えば図10に示すフローチャートに従った処理が行われる。誤差Dの符号が負であるため,図10に示すフローチャートに従って,Yの補正が必要となる。Yの符号は正であるので,丸め結果補正部18は,図10に示すフローチャートに従って,浮動小数点数のYをインクリメントする補正を行う。補正で得られるY=01000010111101101110100111100001が,基数変換において指定された丸めモードUPで丸めが行われた結果として,変数rに保持される。この2進値のYを10進表記すると,123456795となる。<丸めモードがDOWNの場合>丸めモードがDOWNの場合,例えば図11に示すフローチャートに従った処理が行われる。誤差Dの符号が負であるため,図11に示すフローチャートに従って,Yの補正は不要となる。第1精度基数変換部13で得られたY=01000010111101101110100111100000が,基数変換において指定された丸めモードDOWNで丸めが行われた結果として,変数rに保持される。この2進値のYを10進表記すると,123456787となる。<丸めモードがZEROの場合>丸めモードがZEROの場合,例えば図12に示すフローチャートに従った処理が行われる。誤差Dの符号がYの符号と異なるため,図12に示すフローチャートに従って,Yの補正は不要となる。第1精度基数変換部13で得られたY=01000010111101101110100111100000が,基数変換において指定された丸めモードZEROで丸めが行われた結果として,変数rに保持される。この2進値のYを10進表記すると,123456787となる。<丸めモードがNEARESTまたはCOMPATIBLEの場合>丸めモードがNEARESTの場合,例えば図13に示すフローチャートに従った処理が行われる。また,丸めモードがCOMPATIBLEの場合,例えば図14に示すフローチャートに従った処理が行われる。丸めモードがNEARESTまたはCOMPATIBLEの場合,丸め方向判定部17は,図13または図14のフローチャートに従って,まず,Yの丸めの方向と反対方向に丸めた結果Y’を求める。誤差Dの符号が負であり,Yの符号が正であるので,浮動小数点数のYをインクリメントし,Y’=01000010111101101110100111100001を得る。この2進値のY’を10進表記すると,123456795となる。次に,丸め方向判定部17は,図13または図14のフローチャートに従って,Y’とSとの誤差D’を算出する。誤差D’は,10進表記で,D=0000006となる。丸め方向判定部17は,図13または図14のフローチャートに従って,|D|と|D’|とを比較する。|D|=0000002<|D′|=0000006となるので,図13または図14のフローチャートに従って,Yの補正は不要となる。第1精度基数変換部13で得られたY=01000010111101101110100111100000が,基数変換において指定された丸めモードNEARESTまたはCOMPATIBLEで丸めが行われた結果として,変数rに保持される。この2進値のYを10進表記すると,123456787となる。以上説明した本実施の形態の数値丸め部10によって,ハードウェアのアーキテクチャに依らずに,指定された丸めモードに従った丸めの結果を得ることが可能となる。例えば,浮動小数点レジスタの設定変更を行わなくても,指定された丸めモードに従った丸めの結果を得ることが可能となる。また,ハードウェアがサポートしていない丸めモードに従った丸めの結果を得ることも可能となる。また,本実施の形態の数値丸め部10では,浮動小数点レジスタで設定されている丸めモードを変更しないので,同一スレッドで行われる別の処理に対する影響がない。また,複数のファイルに対して読み書きを行うプログラムの場合に,ファイル単位に丸めモードを指定してそれぞれのファイルへの読み書きが繰り返されても,丸めモードを変更するレジスタの読み書きが発生しないので,性能低下しない。以上,本実施の形態について説明したが,本発明はその主旨の範囲において種々の変形が可能であることは当然である。例えば,本実施の形態では,丸めモードを指定する命令を含むソースプログラムとして,Fortranで記述されたソースプログラムの例について説明したが,本実施の形態の技術は,C言語やJava商標などの他の言語で記述されたソースプログラムにも適用可能である。"