(57)【特許請求の範囲】
【請求項１】
下記式（１１）及び式（１２）にて実数Ａ及び実数Ｂがそれぞれ定義された高精度コンピュータ数を入力する入力部と、
前記高精度コンピュータ数を格納する格納部と、
前記格納部に格納された高精度コンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（１３）式を満たすように拡張絶対有効桁数（γ＋γ′）を決定し、該演算結果の高精度コンピュータ数を前記格納部に格納する演算部と
を備える情報処理装置。
【数１】
0006810437.tif 000056
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃは基数を示す。ｈａ＋ｈａ′，ｈｂ＋ｈｂ′はそれぞれ｜ａ１｜≦Ｃｈａ＋ｈａ′，｜ｂ１｜≦Ｃｈｂ＋ｈｂ′を満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示し、ｈａ′，ｈｂ′はそれぞれ０≦ｈａ′＜１，０≦ｈｂ′＜１の小数である小数桁数を示す。ｅａ＋ｅａ′，ｅｂ＋ｅｂ′，γ＋γ′は拡張桁数である拡張絶対有効桁数を示し、ｅａ，ｅｂ，γは整数である絶対有効桁数を示し、ｅａ′，ｅｂ′，ｒ′はそれぞれ０≦ｅａ′＜１，０≦ｅｂ′＜１，０≦ｒ′＜１の小数である小数桁数を示す。（Ａ，Ｂ）は実数Ａ及び実数Ｂの演算結果であり、（ａ，ｂ）1は確定数ａ１，ｂ１の演算結果であり、（ａ，ｂ）２は不確定数ａ２，ｂ２の演算結果である。
【請求項２】
前記高精度コンピュータ数の基数Ｃが、２、８、又は１６のいずれかである請求項１記載の情報処理装置。
【請求項３】
前記小数桁数ｈａ′，ｈｂ′，ｅａ′，ｅｂ′，ｒ′が、それぞれｈａ′／２ｎ（０≦ｈａ＜２ｎ）、ｈｂ′／２ｎ（０≦ｈｂ′＜２ｎ）、ｅａ′／２ｎ（０≦ｅａ′＜２ｎ）、ｅｂ′／２ｎ（０≦ｅｂ′＜２ｎ）、ｒ′／２ｎ（０≦ｒ′＜２ｎ）、ｎは自然数で表される請求項２記載の情報処理装置。
【請求項４】
前記高精度コンピュータ数の基数Ｃが、２であり、
前記小数桁数のｎが、８である請求項３記載の情報処理装置。
【請求項５】
前記演算部は、足し算（Ａ＋Ｂ）において、下記式（１４）を満たす最小の拡張桁数を拡張絶対有効桁数とする請求項４記載の情報処理装置。
【数２】
0006810437.tif 000057
【請求項６】
前記演算部は、掛け算（Ａ×Ｂ）において、下記式（１５）を満たす最小の拡張桁数を拡張絶対有効桁数とする請求項４記載の情報処理装置。
【数３】
0006810437.tif 000058
【請求項７】
前記演算部は、割り算（Ｂ／Ａ）において、ｈａ＋ｈａ′，ｈｂ＋ｈｂ′の代わりに、それぞれｈａ＋ｈａ′−１／２５６，ｈｂ＋ｈｂ′−１／２５６を用い、下記式（１６）及び式（１７）にて定義される高精度コンピュータ数として下記式（１８）を評価し、拡張絶対有効桁数を決定する請求項４記載の情報処理装置。
【数４】
0006810437.tif 000059
【請求項８】
下記式（１１）及び式（１２）にて実数Ａ及び実数Ｂがそれぞれ定義された高精度コンピュータ数を入力する入力ステップと、
前記高精度コンピュータ数を格納部に格納する格納ステップと、
前記格納部に格納された高精度コンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（１３）式を満たすように拡張絶対有効桁数（γ＋γ′）を決定し、該演算結果の高精度コンピュータ数を前記格納部に格納する演算ステップと
を有する処理をコンピュータに実行させるプログラム。
【数５】
0006810437.tif 000060
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃは基数を示す。ｈａ＋ｈａ′，ｈｂ＋ｈｂ′はそれぞれ｜ａ１｜≦Ｃｈａ＋ｈａ′，｜ｂ１｜≦Ｃｈｂ＋ｈｂ′を満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示し、ｈａ′，ｈｂ′はそれぞれ０≦ｈａ′＜１，０≦ｈｂ′＜１の小数である小数桁数を示す。ｅａ＋ｅａ′，ｅｂ＋ｅｂ′，γ＋γ′は拡張桁数である拡張絶対有効桁数を示し、ｅａ，ｅｂ，γは整数である絶対有効桁数を示し、ｅａ′，ｅｂ′，ｒ′はそれぞれ０≦ｅａ′＜１，０≦ｅｂ′＜１，０≦ｒ′＜１の小数である小数桁数を示す。（Ａ，Ｂ）は実数Ａ及び実数Ｂの演算結果であり、（ａ，ｂ）1は確定数ａ１，ｂ１の演算結果であり、（ａ，ｂ）２は不確定数ａ２，ｂ２の演算結果である。
【請求項９】
請求項８に記載のプログラムを記録した記録媒体。
【請求項１０】
下記式（１１）及び式（１２）にて実数Ａ及び実数Ｂがそれぞれ定義された高精度コンピュータ数を入力する入力ステップと、
前記高精度コンピュータ数を格納部に格納する格納ステップと、
前記格納部に格納された高精度コンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（１３）式を満たすように拡張絶対有効桁数（γ＋γ′）を決定し、該演算結果の高精度コンピュータ数を前記格納部に格納する演算ステップと
を有する情報処理方法。
【数６】
0006810437.tif 000061
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃは基数を示す。ｈａ＋ｈａ′，ｈｂ＋ｈｂ′はそれぞれ｜ａ１｜≦Ｃｈａ＋ｈａ′，｜ｂ１｜≦Ｃｈｂ＋ｈｂ′を満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示し、ｈａ′，ｈｂ′はそれぞれ０≦ｈａ′＜１，０≦ｈｂ′＜１の小数である小数桁数を示す。ｅａ＋ｅａ′，ｅｂ＋ｅｂ′，γ＋γ′は拡張桁数である拡張絶対有効桁数を示し、ｅａ，ｅｂ，γは整数である絶対有効桁数を示し、ｅａ′，ｅｂ′，ｒ′はそれぞれ０≦ｅａ′＜１，０≦ｅｂ′＜１，０≦ｒ′＜１の小数である小数桁数を示す。（Ａ，Ｂ）は実数Ａ及び実数Ｂの演算結果であり、（ａ，ｂ）1は確定数ａ１，ｂ１の演算結果であり、（ａ，ｂ）２は不確定数ａ２，ｂ２の演算結果である。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、数値計算を行う情報処理装置、プログラム、及び情報処理方法に関する。本出願は、日本国において２０１９年１１月２７日に出願された日本特許出願番号特願２０１９−２１４６７８を基礎として優先権を主張するものであり、この出願は参照されることにより、本出願に援用される。
【背景技術】
【０００２】
数値計算は、解析的に解くのが困難な問題を数値的に解く計算やその手法であり、その計算には、通常、コンピュータによる浮動小数点演算が用いられる。浮動小数点演算の標準的な規格として、ＩＥＥＥ（Institute of Electrical and Electronic Engineers）７５４がある。現在、ほとんどの数値計算プログラムは、ＩＥＥＥ７５４方式で実装されており、その資産は膨大である。【０００３】
浮動小数点数演算には、欠点がいくつか存在し、オーバーフロー／アンダーフロー、桁落ち、情報落ち、積み残し、丸め誤差というエラーがある。このため、μｍレベルでは、倍精度の浮動小数点演算でも大きな問題は発生していなかったが、ｎｍレベルになると、有効桁数が不足するのではないかという懸念がある。さらに、高次多項式の級数を使うことになれば、計算誤差が発生し易くなることが想定される。【０００４】
現在、誤差を考慮した演算（精度保証付き数値計算）が知られており、ソフトウェアにより真の解がどのような範囲にあるかを確かめながら計算を行い、連続数学の問題に対して数学的に真に正しいと保証された演算結果を導くものがある。このソフトウェアによる精度保証は、演算対象となる真値を、演算処理装置で扱うことができる浮動小数点数を両端とする区間の中に挟み込み、それによって連続数の問題を扱おうとするものである。この区間を数と同様に扱うための四則演算は、区間演算と呼ばれ、この区間演算を浮動小数点により行うものは機械区間演算と呼ばれている。しかしながら、区間演算は、実数を範囲で示して範囲に対する四則演算を厳密に計算するため、計算量が多く、複雑である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−０５３９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本技術は、このような従来の実情に鑑みて提案されたものであり、精度保証付き数値計算を簡便に行うことができる情報処理装置、プログラム、及び情報処理方法を提供する。
【課題を解決するための手段】
【０００７】
本願発明者は、鋭意検討の結果、基数ｎによってｎ進数で表すことができる実数の部分集合に属する数を確定数と不確定数に分けて表現する（高精度）コンピュータ数を導入することにより、前記課題を解決できることを見出した。【０００８】
すなわち、本技術に係る情報処理装置は、下記式（１１）及び式（１２）にて実数Ａ及び実数Ｂがそれぞれ定義された高精度コンピュータ数を入力する入力部と、前記高精度コンピュータ数を格納する格納部と、前記格納部に格納された高精度コンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（１３）式を満たすように拡張絶対有効桁数（γ＋γ′）を決定し、該演算結果の高精度コンピュータ数を前記格納部に格納する演算部とを備える。【０００９】
また、本技術に係るプログラムは、下記式（１１）及び式（１２）にて実数Ａ及び実数Ｂがそれぞれ定義された高精度コンピュータ数を入力する入力ステップと、前記高精度コンピュータ数を格納部に格納する格納ステップと、前記格納部に格納された高精度コンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（１３）式を満たすように拡張絶対有効桁数（γ＋γ′）を決定し、該演算結果の高精度コンピュータ数を前記格納部に格納する演算ステップとを有する処理をコンピュータに実行させる。【００１０】
また、本技術に係る情報処理方法は、下記式（１１）及び式（１２）にて実数Ａ及び実数Ｂがそれぞれ定義された高精度コンピュータ数を入力する入力ステップと、前記高精度コンピュータ数を格納部に格納する格納ステップと、前記格納部に格納された高精度コンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（１３）式を満たすように拡張絶対有効桁数（γ＋γ′）を決定し、該演算結果の高精度コンピュータ数を前記格納部に格納する演算ステップとを有する。【００１１】
【数１】
0006810437.tif 000002
【００１２】
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃは基数を示す。ｈａ＋ｈａ′，ｈｂ＋ｈｂ′はそれぞれ｜ａ１｜≦Ｃｈａ＋ｈａ′，｜ｂ１｜≦Ｃｈｂ＋ｈｂ′を満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示し、ｈａ′，ｈｂ′はそれぞれ０≦ｈａ′＜１，０≦ｈｂ′＜１の小数である小数桁数を示す。ｅａ＋ｅａ′，ｅｂ＋ｅｂ′，γ＋γ′は拡張桁数である拡張絶対有効桁数を示し、ｅａ，ｅｂ，γは整数である絶対有効桁数を示し、ｅａ′，ｅｂ′，ｒ′はそれぞれ０≦ｅａ′＜１，０≦ｅｂ′＜１，０≦ｒ′＜１の小数である小数桁数を示す。（Ａ，Ｂ）は実数Ａ及び実数Ｂの演算結果であり、（ａ，ｂ）1は確定数ａ１，ｂ１の演算結果であり、（ａ，ｂ）２は不確定数ａ２，ｂ２の演算結果である。
【発明の効果】
【００１３】
本技術によれば、精度保証付き数値計算を簡便に行うことができる。ただし、区間演算は、数を範囲として扱うのに対して、コンピュータ数はあくまでも一つの数であり、不確定数が正確には得られていないため、絶対有効桁数の範囲内の値をどこでも取りうるという考え方をするところが異なる。
【図面の簡単な説明】
【００１４】
【図１】図１は、本技術に係る情報処理装置の機能構成を示すブロック図である。
【図２】図２は、実数とコンピュータ数との関係を示す図である。
【図３】図３は、コンピュータ数を格納するためのバッファを説明するための図である。
【図４】図４は、情報処理装置の機能を発揮するためのハードウェア構成を示すブロック図である。
【図５】図５は、（ａ１＋ｂ１）＝α＋β＋γとしたときを説明するための図である。
【図６】図６は、Ｃｍ＋β＋Ｃα＋ｍ＋Ｃｍ＋ｎ≦Ｃｒとなる最小の整数ｒを求める方法を説明するための図である。
【図７】図７は、Ｃ言語でコンピュータ数を表現した一例である。
【図８】図８は、Ｃ言語でコンピュータ数の掛け算、足し算、及び割り算の形式を表現した一例である。
【図９】図９は、Ｃ言語でＲｕｍｐ式を計算するプログラム例である。
【図１０】図１０は、図９に示すプログラム例を、コンピュータ数を用いたプログラムに変換した例である。
【図１１】図１１は、正の部分ｆ１の計算結果のビット表現例を示す図である。
【図１２】図１２は、負の部分ｆ２の計算結果のビット表現例を示す図である。
【図１３】図１３は、差分ｆの計算結果のビット表現例を示す図である。
【図１４】図１４は、ｙ＝１／（１−ｘ）を示すグラフである。
【図１５】図１５は、本技術の第２の実施の形態に係る情報処理装置の機能構成を示すブロック図である。
【図１６】図１６は、実数と高精度コンピュータ数との関係を示す図である。
【図１７】図１７は、高精度コンピュータ数のコンピュータによる数値表現の一例である。
【図１８】図１８は、高精度コンピュータ数の定義の一例である。
【図１９】図１９は、Ｃα＋α′＝Ａ＋Ｂ（Ａ：確定数、Ｂ：不確定数）としたときのＡの３２ビット表現の一例である。
【図２０】２０は、拡張最大桁数の小数桁数ｈ′の求め方を説明するための図である。
【図２１】図２１は、拡張最大桁数の小数桁数ｈ′の求めるために抽出した３２ビット分を示す図である。
【図２２】図２２は、８ビット−α′表の説明するための図である。
【図２３】図２３は、Ｃα′＝Ａ＋Ｂ（Ａ：確定数、Ｂ：不確定数）としたときのＡの３２ビット表現の一例である。
【図２４】図２４は、supＣα′＋supＣβ＋β′の具体的な計算方法を説明するための図である。
【図２５】図２５は、２つの高精度コンピュータ数の足し算の確定数の位置を説明するための図である。
【図２６】図２６は、トリム処理を説明するための図である。
【図２７】図２７は、拡張桁数足し算表の一例を示す図である。
【図２８】図２８は、高精度コンピュータ数の割り算の確定数（ｂ１／ａ１）の位置を説明するための図である。
【図２９】図２９は、Ｃα′＝Ａ＋Ｂ（Ａ：確定数、Ｂ：不確定数）としたときのＡの３２ビット表現の一例である。
【図３０】図３０は、infＣα′−supＣβ＋β′の具体的な計算方法を説明するための図である。
【図３１】図３１は、倍精度浮動小数点表現を示す図である。
【図３２】図３２は、１０進数の「０．１」を高精度コンピュータ数によりビット表現した一例を示す図である。
【図３３】図３３は、１０進数の「１．１」を高精度コンピュータ数によりビット表現した一例を示す図である。
【図３４】図３４は、１０進数の「０．１」及び「１．１」を高精度コンピュータ数に変換した後、高精度コンピュータ数を用いて「０．１＋１．１」を計算した結果の一例を示す図である。
【図３５】図３５は、１０進数の「０．１×１．１」を浮動小数点で計算し、高精度コンピュータ数に変換した結果の一例を示す図である。
【図３６】図３６は、１０進数の「０．００００００１」を高精度コンピュータ数によりビット表現した一例を示す図である。
【図３７】図３７は、１０進数の「１．０」を高精度コンピュータ数によりビット表現した一例を示す図である。
【図３８】図３８は、１０進数の「０．００００００１」及び「１．０」を高精度コンピュータ数に変換した後、高精度コンピュータ数を用いて「１．０」に「０．００００００１」を１００回加算した結果の一例を示す図である。
【図３９】図３９は、「１．０」に「０．００００００１」を１００回加算する計算を浮動小数点で行い、その結果を高精度コンピュータ数に変換した結果の一例を示す図である。
【図４０】図４０は、１０進数の「０．１」及び「１．１」を高精度コンピュータ数に変換し、高精度コンピュータ数を用いて「０．１×１．１」を計算した結果の一例を示す図である。
【図４１】図４１は、１０進数の「０．１×１．１」を浮動小数点で計算し、高精度コンピュータ数に変換した結果の一例を示す図である。
【図４２】図４２は、１０進数の「０．００００００１」を「１．１」に１００回かける計算を高精度コンピュータ数で計算した結果の一例を示す図である。
【図４３】図４３は、１０進数の「１」及び「３」を高精度コンピュータ数に変換し、高精度コンピュータ数を用いて「１÷３」を計算した結果の一例を示す図である。
【図４４】図４４は、分母である１０進数の「０．１」を高精度コンピュータ数によりビット表現した一例を示す図である。
【図４５】図４５は、分子である１０進数の「１」を高精度コンピュータ数によりビット表現した一例を示す図である。
【図４６】図４６は、高精度コンピュータ数を用いて「１÷０．１」を計算した結果の一例を示す図である。
【図４７】図４７は、分母である１０進数の「０．１」を高精度コンピュータ数によりビット表現した一例を示す図である。
【図４８】図４８は、分子である１０進数の「０．２」を高精度コンピュータ数によりビット表現した一例を示す図である。
【図４９】図４９は、高精度コンピュータ数を用いて「０．２÷０．１」を計算した結果の一例を示す図である。
【発明を実施するための形態】
【００１５】
＜＜１．第１の実施の形態＞＞
以下、本技術の第１の実施の形態について、図面を参照しながら下記順序にて詳細に説明する。なお、本技術は、以下の実施の形態のみに限定されるものではなく、本技術の要旨を逸脱しない範囲内において種々の変更が可能であることは勿論である。
１−１．情報処理装置
１−２．コンピュータ数の計算
１−３．具体例
【００１６】
＜１−１．情報処理装置＞
［機能構成］
図１は、本技術に係る情報処理装置の機能構成を示すブロック図である。図１に示すように、情報処理装置は、下記式（１）及び式（２）にて実数Ａ及び実数Ｂがそれぞれ定義されたコンピュータ数を入力する入力部１１と、コンピュータ数を格納する格納部１２と、格納部１２に格納されたコンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（３）式を満たすように絶対有効桁数γを決定し、該演算結果のコンピュータ数を格納部１２に格納する演算部１３とを備える。
【００１７】
【数２】
0006810437.tif 000003
【００１８】
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃは基数を示す。ｈａ，ｈｂはそれぞれ｜ａ１｜≦Ｃｈａ，｜ｂ１｜≦Ｃｈｂを満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示す。ｅａ，ｅｂ，γは整数である絶対有効桁数を示す。（Ａ，Ｂ）は実数Ａ及び実数Ｂの演算結果であり、（ａ，ｂ）1は確定数ａ１，ｂ１の演算結果であり、（ａ，ｂ）２は不確定数ａ２，ｂ２の演算結果である。
【００１９】
コンピュータ数の基数Ｃは、特に限定されるものではないが、２、８、又は１６のいずれかであることが好ましい。これにより、汎用コンピュータで使用される２進数、８進数、又は１６進数の計算の検証を行うことができる。
【００２０】
図２は、実数とコンピュータ数との関係を示す図である。図２に示すように、コンピュータ数（ａ＋ｂ）は、実数数Ａがａ−Ｃγ≦Ａ＜ａ＋Ｃγの間のいずれかの範囲にある、不確定性原理のような考え方とするものである。確定数ａは、絶対有効桁数（最小桁）まで有効である数値であり、数値が保証されている。ここで、絶対有効桁数とは、小数点以下の信頼できる桁数を示すものであり、誤差がＣγとなるγの値のことである。ｂ＝０（絶対有効桁数ｍが無限小）である場合、数値が確定した確定コンピュータ数であり、それ以外は数値が確定していない不確定コンピュータ数である。例えば、πや√２を基数Ｃによって絶対有効桁数γまで展開した場合、絶対有効桁数γまで展開した数値は確定数ａとなり、それ以降は不確定数ｂとなる不確定コンピュータ数である。
【００２１】
入力部１１は、下記式（１）及び式（２）にて実数Ａ及び実数Ｂがそれぞれ定義されたコンピュータ数を入力する。
【００２２】
【数３】
0006810437.tif 000004
【００２３】
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃは基数を示す。ｈａ，ｈｂはそれぞれ｜ａ１｜≦Ｃｈａ，｜ｂ１｜≦Ｃｈｂを満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示す。ｅａ，ｅｂ，γは整数である絶対有効桁数を示す。
【００２４】
具体的には、入力部１１は、例えば、符号（sign）と、最上位桁（high order max）と、最下位桁（low order max）と、絶対有効桁数（absolute effective digit）と、配列数（number of array）とが設定されたコンピュータ数を入力する。
【００２５】
格納部１２は、コンピュータ数を格納するためのものであり、所謂バッファである。バッファは、入力部１１で入力された最上位桁及び最下位桁に基づいて確保される。
【００２６】
図３は、コンピュータ数を格納するためのバッファを説明するための図である。図３に示すように、バッファには、同一の型のデータを一列に並べた配列（array）を複数格納する。例えば３２ビット配列を１０列確保することにより、コンピュータの内部処理の２進数（Ｃ＝２）において３２０桁分確保することができる。また、８進数（Ｃ＝８）の場合は小数点を起点として３桁毎に区切ることで最大で１０６桁分確保することができ、１６進数（Ｃ＝１６）の場合は、小数点を起点として４桁毎に区切ることで最大で８０桁分確保することができる。
【００２７】
演算部１３は、格納部１２に格納されたコンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（３）式を満たすように絶対有効桁数ｒを決定し、該演算結果のコンピュータ数を格納部１２に格納する。
【００２８】
【数４】
0006810437.tif 000005
【００２９】
ここで、Ｃは基数を示す。γは指数部であり、絶対有効桁数である。（Ａ，Ｂ）は実数Ａ及び実数Ｂの演算結果であり、（ａ，ｂ）1は確定数ａ１，ｂ１の演算結果であり、（ａ，ｂ）２は不確定数ａ2，ｂ2の演算結果である。
【００３０】
コンピュータ数の演算は、実数Ａ及び実数Ｂがそれぞれａ１−Ｃｅａ≦Ａ＜ａ１＋Ｃｅａ及びｂ１−Ｃｅｂ≦Ｂ＜ｂ１＋Ｃｅｂの間のいずれかの範囲にあるとして計算するものであり、その計算結果もコンピュータ数であるから（３）式を満たす。コンピュータ数の演算は、確定数ａ１，ｂ１と不確定数ａ2，ｂ2とを分け、確定数ａ１，ｂ１をそのまま計算し、各種条件により計算結果の絶対有効桁数ｒを決定する。
【００３１】
また、コンピュータ数の演算においては、絶対有効桁数の最大値を指定することができる。特に、割算や、ｒｏｏｔ、ｓｉｎ、ｃｏｓなどの関数に対して絶対有効桁数を指定することができる。これにより、絶対有効桁数以上の数値を保証することができる。
【００３２】
コンピュータ数の演算は、区間演算の特別なパタンであるとも考えられる。ただし、区間演算が実数を範囲で示して、範囲に対する四則演算を厳密に計算するのに対して、コンピュータ数の四則演算では絶対有効桁数で誤差をコントロールする点で異なる。また、コンピュータ数の演算は、実数の代わりの数の体系を求めてからその応用を考えているため、そもそも区間演算の考え方と出発点が異なる。このため、コンピュータ数の計算自体は、区間演算に比較してシンプルであり、誤差（不明確な部分）の評価を絶対有効桁数として計算を簡素化している。
【００３３】
このような情報処理装置によれば、絶対有効桁数が必要な部分のみをコンピュータ数計算ライブラリで計算でき、計算結果の絶対有効桁数を確認することができるため、精度保証付き数値計算を簡便に行うことができる。
【００３４】
また、情報処理装置は、実数の数値計算プログラムをコンピュータ数の数値計算プログラムに変換し、コンピュータ数の数値計算プログラムを実行し、演算部１３における演算結果のコンピュータ数を格納部１２に格納させる制御部１４をさらに備えることが好ましい。これにより、コンピュータ数の数値計算プログラムの実行中に、各変数の絶対有効桁数の履歴を保持することができ、最終的に必要な絶対有効桁数が得られるかどうかをチェックすることができる。また、求めたい絶対有効桁数の計算を得るために必要な各変数の値の絶対有効桁数を逆計算することもできる。
【００３５】
［ハードウェア構成］
図４は、情報処理装置の機能を発揮するためのハードウェア構成を示すブロック図である。図４に示すように、情報処理装置は、プログラムの実行処理を行うＣＰＵ（Central Processing Unit）２１と、演算処理を行うＧＰＵ（Graphics Processing Unit）２２と、ＣＰＵ２１により実行されるプログラムを格納するＲＯＭ（Read Only Memory）２３と、プログラムやデータを展開するＲＡＭ（Random Access Memory）２４と、ユーザにより各種の入力操作を受ける操作入力部２５と、プログラムやデータを固定的に保存するストレージ２６と、データを入出力する入出力インターフェース２７とを有する。すなわち、図４に示す情報処理装置２は、いわゆるコンピュータである。
【００３６】
ＣＰＵ２１は、図１に示す機能構成における演算部１３及び制御部１４の処理が可能であり、コンピュータ数計算ライブラリでコンピュータ数を演算し、演算結果のコンピュータ数を格納部１２に格納する。また、ＣＰＵ２１は、例えばストレージ２６に記録されているコンピュータ数の数値計算プログラムを読み出し、ＲＡＭ２４に展開して実行することにより、各ブロックの動作を制御する。
【００３７】
ＧＰＵ２２は、ビデオメモリ（ＶＲＡＭ）を有し、ＣＰＵ２１から要求に応じて描画処理及び計算処理が可能であり、コンピュータ数計算ライブラリによるコンピュータ数を演算してもよい。ＲＯＭ２３は、例えば読み込みのみ可能な不揮発性メモリであり、情報処理装置２が有する各ブロックの動作に必要な定数等の情報を記憶する。ＲＡＭ２４は、揮発性メモリであり、動作プログラムの展開領域としてだけでなく、情報処理装置２が有する各ブロックの動作において出力された中間データ等を一時的に記憶する格納領域としても用いられる。
【００３８】
操作入力部２５は、図１に示す機能構成における入力部１１の処理が可能であり、情報処理装置に対して入力操作を行う際に用いられるユーザインタフェースである。操作入力部２５は、ユーザの入力操作に応じて数値計算プログラム処理の実行または停止等の命令をＣＰＵ２１に対して出力する。
【００３９】
ストレージ２６は、ＲＡＭ２４に展開される数値計算プログラムなどを記録する。なお、ストレージ２６としては、ＨＤＤ（Hard disk drive）、ＳＳＤ（Solid State Drive）、光学ドライブなどを用いることができる。入出力インターフェース２７は、ＧＰＵ２２によって生成した画像を表示装置に出力することが可能である。
【００４０】
このようなハードウェア構成において、図１に示す機能構成は、ＣＰＵ２１、ＧＰＵ２２、ＲＯＭ２３、ＲＡＭ２４、ＣＰＵ２１などにより実行されたソフトウェアの連携によって実現することができる。また、ソフトウェアプログラムは、光ディスクや半導体メモリなどの記録媒体に記憶させて配布する他に、インターネットなどを経由してダウンロードさせる構成としてもよい。
【００４１】
＜２．コンピュータ数の計算＞
以下、コンピュータ数の基数を２（Ｃ＝２）として、演算方法について説明する。
【００４２】
［足し算］
実数Ａ及び実数Ｂをそれぞれ式（１）及び式（２）にて定義されるコンピュータ数とする。
【００４３】
【数５】
0006810437.tif 000006
【００４４】
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃは基数を示す。ｈａ，ｈｂはそれぞれ｜ａ１｜≦Ｃｈａ，｜ｂ１｜≦Ｃｈｂを満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示す。ｅａ，ｅｂ，γは整数である絶対有効桁数を示す。
【００４５】
以下、絶対有効桁数ｅａ，ｅｂ，γの代わりに、それぞれｍ，ｎ，ｒを用いて説明する。
【００４６】
Ａ＋Ｂ＝ａ１＋ａ２＋ｂ１＋ｂ２＝（ａ１＋ｂ１）＋（ａ２＋ｂ２）
⇒（ａ１＋ｂ１）−Ｃｍ−Ｃｎ≦Ａ＋Ｂ＜（ａ１＋ｂ１）＋Ｃｍ＋Ｃｎ
【００４７】
ｒをＣｍ＋Ｃｎ≦Ｃｒとなる最小の整数とする。
【００４８】
ｍ＝ｎのときｒ＝ｍ＋１、ｍ≠ｎのときｒ＝ｍａｘ（ｍ,ｎ）＋１であるから、ｒ＝ｍａｘ（ｍ,ｎ）＋１である。
【００４９】
Ａ＋Ｂ＝（ａ１＋ｂ１）＋（Ａ＋Ｂ）２
【００５０】
（ａ１＋ｂ１）が確定数であり、（Ａ＋Ｂ）２が不確定数であり、−Ｃｒ≦（Ａ＋Ｂ）２＜Ｃｒを満たし、ｒは絶対有効桁数である。確定数（ａ１＋ｂ１）の最小の位は、絶対有効桁数よりも小さい場合がある。（ａ１＋ｂ１）の符号別にパタン分けして説明する。
【００５１】
図５は、（ａ１＋ｂ１）＝α＋β＋γとしたときを説明するための図である。図５に示すように、（ａ１＋ｂ１）＝α＋β＋γとし、αは(ｒ＋１)桁以上の部分、βはｒ桁の部分、γは(ｒ−１)桁以下の部分とする。
【００５２】
（ａ１＋ｂ１）−Ｃｒ≦Ａ＋Ｂ＜（ａ１＋ｂ１）＋Ｃｒ
⇒（α＋β）＋γ−Ｃｒ≦Ａ＋Ｂ＜（α＋β）＋γ＋Ｃｒ
γ＞０（（ａ１＋ｂ１）＞０）のとき、
（α＋β）−Ｃｒ−１≦Ａ＋Ｂ＜（α＋β）＋Ｃｒ−１
γ＜０（（ａ１＋ｂ１）＜０）のとき、
【００５３】
（α＋β）−Ｃｒ＋１≦Ａ＋Ｂ＜（α＋β）＋Ｃｒ＋１
であるから、（α＋β）−Ｃｒ＋１≦Ａ＋Ｂ＜（α＋β）＋Ｃｒ＋１が成り立ち、（α＋β）が確定数であり、絶対有効桁数はｒ＋１である。
【００５４】
γ＝０のときは、（α＋β）−Ｃｒ≦Ａ＋Ｂ＜（α＋β）＋Ｃｒが成り立ち、（α＋β）が確定数であり、絶対有効桁数はｒである。
【００５５】
［掛け算］
Ａ×Ｂ＝（ａ１＋ａ２）×（ｂ１＋ｂ２）＝ａ１ｂ１＋ａ２ｂ１＋ａ１ｂ２＋ａ２ｂ２
【００５６】
Ａ、Ｂとも正であるとする。
【００５７】
ａ１≦Ｃα；αは不等号が成立する最小の整数。好ましくはｌｏｇ２｜ａ１｜。
ｂ１≦Ｃβ；βは不等号が成立する最小の整数。好ましくはｌｏｇ２｜ｂ１｜。
−ＣｍＣβ≦ａ２ｂ１＜ＣｍＣβ 
−ＣαＣｍ≦ａ１ｂ２＜ＣαＣｍ 
−ＣｍＣｎ＜ａ２ｂ２≦ＣｍＣｎ 
より、
【００５８】
ａ１ｂ１−ＣｍＣβ−ＣαＣｍ−ＣｍＣｎ＜Ａ×Ｂ＜ａ１ｂ１＋ＣｍＣβ＋ＣαＣｍ＋ＣｍＣｎ
⇒ａ１ｂ１−Ｃｍ＋β−Ｃα＋ｍ−Ｃｍ＋ｎ＜Ａ×Ｂ＜ａ１ｂ１＋Ｃｍ＋β＋Ｃα＋ｍ＋Ｃｍ＋ｎ
ｒをＣｍ＋β＋Ｃα＋ｍ＋Ｃｍ＋ｎ≦Ｃｒとなる最小の整数とする。
【００５９】
Ａ×Ｂ＝ａ１ｂ１＋（Ａ×Ｂ）２
ａ１ｂ１が確定数であり、（Ａ×Ｂ）２が不確定数であり、−Ｃｒ≦（Ａ×Ｂ）２＜Ｃｒを満たし、ｒは絶対有効桁数である。確定数ａ１ｂ１の最小の位は、有効桁数よりも小さい場合がある。
【００６０】
意味のない桁の部分を考慮した確定数と絶対有効桁数は、足し算における正のケースと同様である。
【００６１】
図６は、Ｃｍ＋β＋Ｃα＋ｍ＋Ｃｍ＋ｎ≦Ｃｒとなる最小の整数ｒを求める方法を説明するための図である。図６において、各枠は２ビット配列の位置を表し、白丸ａはＣｍ＋β，Ｃα＋ｍ，Ｃｍ＋ｎのビット位置を示し、黒丸ｂはＣｒのビット位置を示し、点線丸ｃはこのビットが空いていることを示す。
【００６２】
Ｃｍ＋β＋Ｃα＋ｍ＋Ｃｍ＋ｎ≦Ｃｒとなる最小の整数をｒとすると、Ｃｍ＋β＋Ｃα＋ｍ＋Ｃｍ＋ｎ＝Ｃｒとなるケースは、パタン３のみである。Ｃｍ＋β＋Ｃα＋ｍ＋Ｃｍ＋ｎ≦Ｃｒとなるｒは、（ｍ＋β），（α＋ｎ），（ｍ＋ｎ）がパタン１、パタン２のときには、最大値＋２（ｒ＝ｍａｘ（ｍ,ｎ）＋２）、それ以外は最大値＋１（ｒ＝ｍａｘ（ｍ,ｎ）＋１）となる。Ｃｍ＋β＋Ｃα＋ｍ＋Ｃｍ＋ｎ＜Ｃｒとなるｒは、（ｍ＋β），（α＋ｎ），（ｍ＋ｎ）がパタン１、パタン２、パタン３のときには、最大値＋２（ｒ＝ｍａｘ（ｍ,ｎ）＋２）、それ以外は最大値＋１（ｒ＝ｍａｘ（ｍ,ｎ）＋１）となる。
【００６３】
＜３．具体例＞
次に、前述したコンピュータ数を用いたソフトウェアの計算例について説明する。図７は、Ｃ言語でコンピュータ数を表現した一例であり、図８は、Ｃ言語でコンピュータ数の掛け算、足し算、及び割り算の形式を表現した一例である。
【００６４】
図７に示すように、コンピュータ数は、符号ｓ（sign）と、最上位桁ｈ（high order max）と、最下位桁ｌ（low order max）と、絶対有効桁数ｅ（absolute effective digit）と、配列数ｎ（number of array）と、配列ａにより定義される。符号ｓは、ｓ＝１のとき正であり、ｓ＝−１のとき負である。最上位桁ｈは、｜確定数｜≦ｌｏｇ２ｈとなる値である。最下位桁ｌは、確定数の２進数による最小桁である。絶対有効桁数ｅは、−２ｅ≦不確定数＜２ｅとなる最小の整数である。配列数ｎは、確定数を格納する符号なし整数の個数である。配列ａは、確定数を格納する符号なし整数の配列である。なお、有効桁数ｋは、（ｌｏｇ２｜確定数｜−絶対有効桁数）≦ｋとなる最小の整数である。
【００６５】
図８に示すコンピュータ数の掛け算、足し算、及び割り算は、コンピュータ数を変数としている。割算に関しては絶対有効桁数を設定する必要がある。
【００６６】
［Ｒｕｍｐ式の計算］
Ｓ．Ｍ．Ｒｕｍｐが考案した下記式に、ａ＝７７６１７，ｂ＝３３０９６を代入したｆ（ａ，ｂ）の値を評価する。
ｆ（ｘ，ｙ）＝３３３．７５ｙ６＋ｘ２（１１ｘ２ｙ２−ｙ６−１２１ｙ４−２）
＋５５ｙ８＋ｘ／２ｙ
【００６７】
これをＩＢＭのメインフレームＳ／３７０上で演算精度を変えて実行すると、以下の結果となる。
単精度（１０進数約８桁）：ｆ（ｘ，ｙ）≒1.1720603…
倍精度（１０進数約１７桁）：ｆ（ｘ，ｙ）≒1.17206039400531…
拡張精度（１０進数約３４桁）：ｆ（ｘ，ｙ）≒1.1720603940053178…
【００６８】
真の値は、ｆ（ａ，ｂ）＝−０．８２７３８６・・・であり、Ｓ／３７０上での計算は、符号もあっていない間違った結果となる。
【００６９】
図９は、Ｃ言語でＲｕｍｐ式を計算するプログラム例であり、図１０は、図９に示すプログラムを、コンピュータ数を用いたプログラムに変換したものである。図１０及び図９に示すように、正の部分ｆ１，負の部分ｆ２を計算し、その差分ｆを計算した。また、「inverse_digital_expression (&k2y, -200, &k2yinv, &status)」の割算において、絶対有効桁数を−２００とした。
ｆ１＝３３３．７５ｙ６＋ｘ２×１１ｘ２ｙ２＋５５ｙ８＋ｘ／２ｙ
ｆ２＝ｘ２×ｙ６＋ｘ２×１２１ｙ４＋ｘ２×２
ｆ＝ｆ１−ｆ２
【００７０】
図１１は、正の部分ｆ１の計算結果のビット表現を示す図であり、図１２は、負の部分ｆ２の計算結果のビット表現を示す図であり、図１３は、差分ｆの計算結果のビット表現を示す図である。正の部分ｆ１，負の部分ｆ２のビット表現を合わせて表示すると、黒枠まではビットの並びが一致している。差分ｆ（＝ｆ１−ｆ２）を正しく計算するためには１３９ビット以上の桁数が必要であることがわかる。差分ｆの計算結果は−０．８２７３９６０５９９・・・であり、真の値と若干異なっているが、Ｓ／３７０上での計算に比べ、非常に優れている。
［級数の計算］
【００７１】
１／（１−ｘ）＝１−ｘ＋ｘ２＋…＋（−１）ｎｘｎ・・・  （−１＜ｘ＜１）
マクローリン展開の式を評価する。１−１／（１−ｘ）に、−ｘ＋ｘ２＋…＋（−１）ｎｘｎ・・・のように順次、項を足し算していくと０に近づくはずである。
【００７２】
図１４は、ｙ＝１／（１−ｘ）を示すグラフである。図１４に示すように、δを１／１０００，１／１００００，１／１０００００，１／１００００００にそれぞれ設定し、このδを１００分割して上記の計算を行って誤差を評価した。項の数ｎは５０として計算した。
【００７３】
表１に、倍精度浮動小数点による計算結果を示す。δの値によって誤差に変化がなかった。級数の和を求めるときの初期値に対して、途中の級数の各項もそれ以下の小さな値の和であるので、有効桁数は初期値に対して小さくなっていることがわかる。倍精度浮動小数点数を使用しても級数の和を計算することは苦手としている可能性がある。一方、コンピュータ数の計算では有効桁数−５００として計算すると０となった。
【００７４】
【表１】
0006810437.tif 000007
【００７５】
＜＜２．第２の実施の形態＞＞
以下、本技術の第２の実施の形態について、図面を参照しながら下記順序にて詳細に説明する。なお、本技術は、以下の実施の形態のみに限定されるものではなく、本技術の要旨を逸脱しない範囲内において種々の変更が可能であることは勿論である。
２−１．情報処理装置
２−２．高精度コンピュータ数の計算
２−３．具体例
【００７６】
第１の実施の形態のコンピュータ数の掛け算の計算においては、絶対有効桁数が３桁程度プラスになるため、かけ算を繰り返すと急激にコンピュータ数の精度が低下する。また、絶対有効桁数の異なる足し算においても、必ず絶対有効桁数が＋１になるので、足し算を繰り返すと精度が確実に低下する。
【００７７】
そこで、第２の実施の形態では、第１の実施の形態のコンピュータ数の代わりに、高精度コンピュータ数を使用する。高精度コンピュータ数では、コンピュータ数の桁数（最大桁数、絶対有効桁数）の代わりに、拡張桁数（拡張最大桁数、拡張絶対有効桁数）（α＋α′）を使用する。ここで、αは整数であり、この値が桁数である。α′は０≦α′＜１の小数である小数桁数であり、例えばα′はａ／２ｎ（０≦ａ＜２ｎ)とすることができる。
【００７８】
最初に高精度コンピュータ数を生成するときには、拡張絶対有効桁数は整数である。拡張絶対有効桁数の小数桁数は、四則演算を繰り返した場合の精度低下を抑制することができ、特に絶対有効桁数に差がある場合に非常に有効である。
【００７９】
＜２−１．情報処理装置＞
［機能構成］
図１５は、本技術の第２の実施の形態に係る情報処理装置の機能構成を示すブロック図である。図１５に示すように、情報処理装置は、下記式（１１）及び式（１２）にて実数Ａ及び実数Ｂがそれぞれ定義された高精度コンピュータ数を入力する入力部３１と、高精度コンピュータ数を格納する格納部３２と、格納部３２に格納された高精度コンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（１３）式を満たすように拡張絶対有効桁数（γ＋γ′）を決定し、該演算結果の高精度コンピュータ数を格納部３２に格納する演算部３３とを備える。
【００８０】
【数６】
0006810437.tif 000008
【００８１】
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃは基数を示す。ｈａ＋ｈａ′，ｈｂ＋ｈｂ′はそれぞれ｜ａ１｜≦Ｃｈａ＋ｈａ′，｜ｂ１｜≦Ｃｈｂ＋ｈｂ′を満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示し、ｈａ′，ｈｂ′はそれぞれ０≦ｈａ′＜１，０≦ｈｂ′＜１の小数である小数桁数を示す。ｅａ＋ｅａ′，ｅｂ＋ｅｂ′，γ＋γ′は拡張桁数である拡張絶対有効桁数を示し、ｅａ，ｅｂ，γは整数である絶対有効桁数を示し、ｅａ′，ｅｂ′，ｒ′はそれぞれ０≦ｅａ′＜１，０≦ｅｂ′＜１，０≦ｒ′＜１の小数である小数桁数を示す。（Ａ，Ｂ）は実数Ａ及び実数Ｂの演算結果であり、（ａ，ｂ）1は確定数ａ１，ｂ１の演算結果であり、（ａ，ｂ）２は不確定数ａ２，ｂ２の演算結果である。
【００８２】
コンピュータ数の基数Ｃは、特に限定されるものではないが、２、８、又は１６のいずれかであることが好ましい。これにより、汎用コンピュータで使用される２進数、８進数、又は１６進数の計算の検証を行うことができる。
【００８３】
また、小数桁数ｈａ′，ｈｂ′，ｅａ′，ｅｂ′，ｒ′は、それぞれｈａ′／２ｎ（０≦ｈａ＜２ｎ）、ｈｂ′／２ｎ（０≦ｈｂ′＜２ｎ）、ｅａ′／２ｎ（０≦ｅａ′＜２ｎ）、ｅｂ′／２ｎ（０≦ｅｂ′＜２ｎ）、ｒ′／２ｎ（０≦ｒ′＜２ｎ）、ｎは自然数で表されることが好ましい。ｎは好ましくは３２以下、より好ましくは１６以下、さらに好ましくは８以下である。ｎを大きくすれば精度が向上するが、計算コストが上がってしまう。なお、小数桁数ｈａ′，ｈｂ′，ｅａ′，ｅｂ′，ｒ′を０とすれば、第１の実施の形態のコンピュータ数である。
【００８４】
図１６は、実数と高精度コンピュータ数との関係を示す図である。図１６に示すように、高精度コンピュータ数（ａ１＋ａ２）は、実数Ａがａ１−Ｃγ＋γ′≦Ａ＜ａ１＋Ｃγ＋γ′の間のいずれかの範囲にある、不確定性原理のような考え方とするものである。確定数ａ１は、拡張絶対有効桁数（最小桁）まで有効である数値であり、数値が保証されている。ここで、拡張絶対有効桁数とは、小数点以下の信頼できる桁数を示すものであり、誤差がＣγ＋γ′となるγ＋γ′の値のことである。また、γ′は０≦γ′＜１の小数桁数である。ａ２＝０（拡張絶対有効桁数が無限小）である場合、数値が確定した確定コンピュータ数であり、それ以外は数値が確定していない不確定コンピュータ数である。
【００８５】
入力部３１は、下記式（１１）及び式（１２）にて実数Ａ及び実数Ｂがそれぞれ定義された高精度コンピュータ数を入力する。
【００８６】
【数７】
0006810437.tif 000009
【００８７】
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃは基数を示す。ｈａ＋ｈａ′，ｈｂ＋ｈｂ′はそれぞれ｜ａ１｜≦Ｃｈａ＋ｈａ′，｜ｂ１｜≦Ｃｈｂ＋ｈｂ′を満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示し、ｈａ′，ｈｂ′はそれぞれ０≦ｈａ′＜１，０≦ｈｂ′＜１の小数である小数桁数を示す。ｅａ＋ｅａ′，ｅｂ＋ｅｂ′は拡張桁数である拡張絶対有効桁数を示し、ｅａ，ｅｂは整数である絶対有効桁数を示し、ｅａ′，ｅｂ′はそれぞれ０≦ｅａ′＜１，０≦ｅｂ′＜１の小数である小数桁数を示す。
【００８８】
具体的には、入力部３１は、例えば、符号（sign）、最上位桁である最大桁数ｈ（high order max）、最大桁数の小数桁数ｈ′（high order max sub）、最下位桁である最小桁数ｌ（low order max）、絶対有効桁数ｅ（effective digit）、絶対有効桁数の小数桁数ｅ′（effective digit sub）、配列数ａ（number of array）等が設定された高精度コンピュータ数を入力する。
【００８９】
格納部３２は、高精度コンピュータ数を格納するためのものであり、所謂バッファである。バッファは、入力部３１で入力された最上位桁ｈ及び最下位桁ｌに基づいて確保される。例えば、図３に示すように、バッファには、同一の型のデータを一列に並べた配列（array）を複数格納することができる。
【００９０】
演算部３３は、格納部３２に格納されたコンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（１３）式を満たすように拡張絶対有効桁数（γ＋γ′）を決定し、該演算結果のコンピュータ数を格納部３２に格納する。
【００９１】
【数８】
0006810437.tif 000010
【００９２】
ここで、Ｃは基数を示す。γ＋γ′は拡張絶対有効桁数を示し、γは整数である絶対有効桁数を示し、γ′は０≦γ′＜１の小数である小数桁数を示す。（Ａ，Ｂ）は実数Ａ及び実数Ｂの演算結果であり、（ａ，ｂ）１は確定数ａ１，ｂ１の演算結果であり、（ａ，ｂ）２は不確定数ａ２，ｂ２の演算結果である。
【００９３】
高精度コンピュータ数の演算は、実数Ａ及び実数Ｂがそれぞれａ１−Ｃｅａ＋ｅａ′≦Ａ＜ａ１＋Ｃｅａ＋ｅａ′及びｂ１−Ｃｅｂ＋ｅｂ′≦Ｂ＜ｂ１＋Ｃｅｂ＋ｅｂ′の間のいずれかの範囲にあるとして計算するものであり、その計算結果も高精度コンピュータ数であるから（１３）式を満たす。高精度コンピュータ数の演算は、確定数ａ１，ｂ１と不確定数ａ2，ｂ2とを分け、確定数ａ１，ｂ１をそのまま計算し、各種条件により計算結果の拡張絶対有効桁数（γ＋γ′）を決定する。なお、有効桁数ｋは、ｌｏｇＣ｜確定数｜−拡張絶対有効桁数（γ＋γ′）≦ｋとなる最小の整数である。
【００９４】
足し算（Ａ＋Ｂ）の計算において、演算部３３は、下記式（１４）を満たす最小の拡張桁数を拡張絶対有効桁数とすることができる。
【数９】
0006810437.tif 000011
【００９５】
掛け算（Ａ×Ｂ）の計算において、演算部３３は、下記式（１５）を満たす最小の拡張桁数を拡張絶対有効桁数とすることができる。
【数１０】
0006810437.tif 000012
【００９６】
割り算（Ｂ／Ａ）の計算において、演算部は、ｈａ＋ｈａ′，ｈｂ＋ｈｂ′の代わりに、それぞれｈａ＋ｈａ′−１／２５６，ｈｂ＋ｈｂ′−１／２５６を用い、下記式（１６）及び式（１７）にて定義される高精度コンピュータ数として下記式（１８）を評価し、拡張絶対有効桁数を決定することができる。
【数１１】
0006810437.tif 000013
【００９７】
高精度コンピュータ数の四則演算においては、｜ａ｜≦infＣα＋α′（Ｃ：基数、ａ：確定数）、supＣα＋α′＋supＣβ＋β′≦infＣγ＋γ′（Ｃ：基数）、infＣα＋α′−supＣβ＋β′≧supＣγ＋γ′（Ｃ：基数）などの計算を行う必要がある。なお、supＡは、Ａの上限値、infＡは、Ａの下限値を表す。
【００９８】
演算部３３は、｜ａ｜≦infＣα＋α′について、α＝０のときのα′に対するａの値の一覧テーブル、supＣα＋α′＋supＣβ＋β′≦infＣγ＋γ′について、α＝０のときのα′，β，β′に対するγ，γ′の値の一覧テーブル、infＣα＋α′−supＣβ＋β′≧supＣγ＋γ′について、α＝０のときのα′，β，β′に対するγ，γ′の値の一覧テーブルを用いて演算することが好ましい。これにより、高精度コンピュータ数の計算を高速化させることができる。
【００９９】
また、演算部３３は、supＣα＋α′＋supＣβ＋β′≦infＣγ＋γ′について、infＣγ＋γ′−（supＣα＋α′＋supＣβ＋β′）の差分に基づいて確定数をトリム処理することが好ましい。これにより、演算を繰り返した場合の計算コストを抑制することができる。また、infＣα＋α′−supＣβ＋β′≧supＣγ＋γ′についても同様に、infＣα＋α′−supＣβ＋β′−supＣγ＋γ′の差分に基づいて確定数をトリム処理することにより、演算を繰り返した場合の計算コストを抑制することができる。
【０１００】
また、情報処理装置は、実数の数値計算プログラムを高精度コンピュータ数の数値計算プログラムに変換し、高精度コンピュータ数の数値計算プログラムを実行し、演算部３３における演算結果のコンピュータ数を格納部３２に格納させる制御部３４をさらに備えることが好ましい。具体的には、浮動小数点表現を高精度コンピュータ数に変換することが好ましい。これにより、高精度コンピュータ数の数値計算プログラムの実行中に、各変数の拡張絶対有効桁数の履歴を保持することができ、最終的に必要な拡張絶対有効桁数が得られるかどうかをチェックすることができる。また、求めたい拡張絶対有効桁数計算を得るために必要な各変数の値の絶対有効桁数を逆計算することもできる。
【０１０１】
このような情報処理装置によれば、拡張絶対有効桁数が必要な部分のみを高精度コンピュータ数計算ライブラリで計算でき、計算結果の拡張絶対有効桁数を確認することができるため、精度保証付き数値計算を簡便に行うことができる。
【０１０２】
［ハードウェア構成］
情報処理装置は、第１の実施の形態と同様に、例えば図４に示すハードウェア構成を備えることができる。図４に示すハードウェア構成において、図１５に示す機能構成は、ＣＰＵ２１、ＧＰＵ２２、ＲＯＭ２３、ＲＡＭ２４、ＣＰＵ２１などにより実行されたソフトウェアの連携によって実現することができる。また、ソフトウェアプログラムは、光ディスクや半導体メモリなどの記録媒体に記憶させて配布する他に、インターネットなどを経由してダウンロードさせる構成としてもよい。また、図１５に示す機能構成をＦＰＧＡ（Field Programmable Gate Array）に組み込んでもよい。
【０１０３】
＜２．高精度コンピュータ数の計算＞
以下、高精度コンピュータ数の基数を２（Ｃ＝２）とし、指数部の小数桁数ｈａ′，ｈｂ′，ｅａ′，ｅｂ′，ｒ′をそれぞれｈａ′／２８（０≦ｈａ′＜２８），ｈｂ′／２８（０≦ｈｂ′＜２８），ｅａ′／２８（０≦ｅａ′＜２８），ｅｂ′／２８（０≦ｅｂ′＜２８），ｒ′／２８（０≦ｒ′＜２８）として、演算方法について説明する。ただし、記述を簡単にするため、指数部の小数桁数をｈａ′，ｈｂ′，ｅａ′，ｅｂ′，ｒ′と記載することがある。
【０１０４】
ｎ＝８の場合、例えば、supＣα＋α′＋supＣβ＋β′≦infＣγ＋γ′の関係において、infＣγ＋γ−（supＣα＋α′＋supＣβ＋β′）の差分は特定の場合以外は０にはならず、隙間が生じる。この隙間以下の部分を切り捨てても計算には影響がないため、トリム処理することができ、演算を繰り返した場合の計算コストを抑制することができる。
【０１０５】
図１７は、高精度コンピュータ数のコンピュータによる数値表現の一例であり、図１８は、高精度コンピュータ数の定義の一例である。図１７に示すように、第１のヘッダ部は、１ビットの符号ｓと、７ビットの配列ａのサイズとを有する。第２のヘッダ部は、１６ビットの最大桁数ｈと、８ビットの最大桁数の小数桁数ｈ′と、１６ビットの最小桁数ｌと、１６ビットの絶対有効桁数ｅと、８ビットの絶対有効桁数の小数桁数ｅ′とを有する。
【０１０６】
仮数部には、３２ビットの配列ａが格納され、配列ａの最大数は１２７である。配列ａは符号なし整数値であるため、仮数部の最大は、１２７×３２＝４０６４ビットである。これは、１０進数で１２２３桁を表現可能である。例えば、１光年が９兆５０００億ｋｍ＜１０兆ｋｍ＝１０１３ｋｍ＝１０１９ｍｍ＝１０２５ｎｍであるから、宇宙の大きさを１３７憶光年、約１００憶光年とすると、１００憶光年＝１０１０光年＝１０３５ｎｍであり、宇宙の大きさをｎｍで表すと３５桁（１０進数）で十分である。これに対し、高精度コンピュータ数は、非常に大きい桁の演算を行うことができる。
【０１０７】
最大桁数（最上位桁）ｈ、最小桁数（最下位桁）ｌ、絶対有効桁数（有効桁）ｅは、符号付き１６ビット整数を用いることができる。符号付き１６ビット整数は、±３２７６８であるから、十分な表現が可能である。なお、絶対有効桁数ｅが−３２７６８（２進数表現で１０００００００００００００００）の時は、誤差は０であるとみなす。
【０１０８】
最大桁数の小数桁数ｈ′、絶対有効桁数の小数桁数ｅ′は、例えばＣ言語のｕｎｓｉｇｎｅｄ ｃｈａｒ変数などの符号なし８ビット整数を用いることができる。最大桁数の小数桁数ｈ′が０の時は２つの意味がある。ｈ＝ｌのときは、そのまま０であるが、ｈ＞ｌのときには、ｈ′＝２５６となり、最大桁数は（ｈ＋ｌ）となる。
【０１０９】
［不確定数０の扱い］
不確定数の範囲は、拡張絶対有効桁数を使い、−Ｃｅ＋ｅ′≦（不確定数）＜Ｃｅ＋ｅ′と表す。絶対有効桁数ｅを−∞とすると、不確定数の取りうる幅は限りなく０になる。コンピュータによる高精度コンピュータ数の表現では絶対有効桁数ｅの最小値は−３２７６８であり、この値を−∞として扱う。ｅ→−∞となるとき、不確定数は０であると定義する。高精度コンピュータ数の計算において取りうる絶対有効桁数ｅの値は、−３２７６７から３２７６７までの値であり、この範囲を超えたときには計算エラーとして扱う。
【０１１０】
［高精度コンピュータ数における０］
高精度コンピュータ数における０の表現は、以下のように定義する。
ｓ(符号)→０
ｈ(最大桁数)→０
ｈｄ(最大桁数の小数桁数)→０
ｌ(最小桁数)→０
ｅ(絶対有効桁数)→計算値
ｅｄ(絶対有効桁数の小数桁数)→計算値
配列ａ→ａ［０］＝０
【０１１１】
高精度コンピュータ数における配列ａのサイズは変わらないが、例外的に配列ａの最小の値を０とする。０以外のコンピュータ数においては、配列ａの０ビット目は必ず１となる。
【０１１２】
［拡張桁数表］
図１９は、Ｃα＋α′＝Ａ＋Ｂ（Ａ：確定数、Ｂ：不確定数）としたときのＡの３２ビット表現の一例である。Ｂは、−Ｃα−３１≦Ｂ＜Ｃα−３１である。高精度コンピュータ数の計算の高速化に利用するため、α＝０としたときのα′に対し、Ａの値を出力する拡張桁表を予め作成することが好ましい。
【０１１３】
［拡張最大桁数の小数桁数ｈ′］
図２０は、拡張最大桁数の小数桁数ｈ′の求め方を説明するための図であり、図２１は、拡張最大桁数の小数桁数ｈ′の求めるために抽出した３２ビット分を示す図である。ここで、最大桁数ｈと最小桁数ｌは確定しているものとする。最大桁数ｈは、配列ａをビット列としたときの最上位の桁を表し、最小桁数ｌは、配列ａをビット列としたときの最下位の桁を表す。
【０１１４】
図２０及び図２１に示すように、有効なビット長の先頭から３２ビット分を抽出する。有効なビット長が３２ビットよりも長いときは、下駄値を１とし、３２ビット以下のときは下駄値を０とする。
【０１１５】
抽出した３２ビットの先頭９ビットを使って、これを２５６で割った値よりも下限値が大きくなるα′を求める。この処理は８ビットの整数からα′を出力する８ビット−α′表を参照することにより行う。
【０１１６】
図２２は、８ビット−α′表の説明するための図である。８ビット−α′表から上位のα′をチェックして、３２ビットよりも大きな下限値をもつＣα′を求める。具体的には、図２２に示すように、８ビット数を左の********部分に設定したときに、前述した拡張桁数表を参照し、これ以上の下限値を持つα′を求め、ｈ′とする。
【０１１７】
［足し算］
実数Ａ及び実数Ｂをそれぞれ式（１１）及び式（１２）にて定義される高精度コンピュータ数とする。
【０１１８】
【数１２】
0006810437.tif 000014
【０１１９】
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃ＝２である。ｈａ＋ｈａ′，ｈｂ＋ｈｂ′はそれぞれ｜ａ１｜≦２ｈａ＋ｈａ′，｜ｂ１｜≦２ｈｂ＋ｈｂ′を満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示し、ｈａ′，ｈｂ′はそれぞれｈａ′／２５６，ｈｂ′／２５６である小数桁数を示す。ｅａ＋ｅａ′，ｅｂ＋ｅｂ′は拡張桁数である拡張絶対有効桁数を示し、ｅａ，ｅｂは整数である絶対有効桁数を示し、ｅａ′，ｅｂ′はそれぞれｅａ′／２５６，ｅｂ′／２５６の小数である小数桁数を示す。
【０１２０】
Ａ＋Ｂは、下記式（２１）〜（２３）で表される。
【０１２１】
【数１３】
0006810437.tif 000015
【０１２２】
式（２３）を満たす最小の拡張桁数を求める。Ｃｅａ＋ｅａ′，Ｃｅｂ＋ｅｂ′，Ｃγ＋γ′などの値は高精度コンピュータ数で表現し、supＣｅａ＋ｅａ′＋supＣｅｂ＋ｅｂ′≦infＣγ＋γ′を求める。ここでsupＡは、Ａの上限値、infＡは、Ａの下限値を表す。
【０１２３】
［不確定数が０の場合］
式（２１）に示すＡ＋Ｂにおいて、実数Ｂの不確定数ｂ２が０の場合、式（２２）に示す不等式は、下記式（２４）となる。
【０１２４】
【数１４】
0006810437.tif 000016
【０１２５】
さらに実数Ａの不確定数ａ２が０の場合、Ａ＋Ｂの不確定数は０になる。この場合、下位桁のトリム処理は行わない。
【０１２６】
［拡張桁数足し算表］
式（２３）に示すようなsupＣｅａ＋ｅａ′＋supＣｅｂ＋ｅｂ′≦infＣγ＋γ′の計算は、Ｃα′，Ｃβ＋β′に対して、Ｃα′＋Ｃβ＋β′≦Ｃγ＋γ′を満たす最小の拡張桁数（γ＋γ′）を出力する拡張桁数足し算表を用いる。ここで、０≧βであり、α′，β′は、それぞれα′／２８，β′／２８である。
【０１２７】
図２３は、Ｃα′＝Ａ＋Ｂ（Ａ：確定数、Ｂ：不確定数）としたときのＡの３２ビット表現の一例である。Ｂは、−Ｃ−３１≦Ｂ＜Ｃ−３１である。ここで、α′は、α′／２８である。そして、Ｃα′＋Ｃβ＋β′の取りうる最大値を含むＣγ＋γ′の最小の拡張桁数を求める。具体的には、supＣα′＋supＣβ＋β′≦infＣγ＋γ′となるＣγ＋γ′を求め、その差（infＣγ＋γ′−（supＣα′＋supＣβ＋β′））を計算する。
【０１２８】
図２４は、supＣα′＋supＣβ＋β′の具体的な計算方法を説明するための図である。supＣα′とsupＣβ＋β′とを３２ビットで表し、supＣβ＋β′の最下位ビットを６４ビットの最下位ビットに合わせて、符号なし６４ビット整数で計算を行う。この処理であれば６４ビットの範囲を超えることはない。supＣα′とsupＣβ＋β′とを６４ビットにコピーし、supＣα′を−βビット左に移動させる。そして、これらの値の和を計算する。この和の計算において、最初が０ではないビットを求め、そのビットに対してinfＣγの最上位ビットの位置を合わせる。
【０１２９】
確定数において、γ＋βの位置が本来の桁数の位置であって、この位置から差分の桁数移動した桁数未満は切り捨ててもよいことが分かる。つまり、この差は差分の中に吸収される。
【０１３０】
図２５は、２つの高精度コンピュータ数の足し算の確定数の位置を説明するための図である。図２５に示すように、２つのコンピュータ数の足し算の確定数は、不確定数の幅（supＣα′＋supＣβ＋β）で抑えることができる。これをＣγ＋γ′で抑えるためにはsupＣα′＋supＣβ＋β′≦infＣγ＋γ′となる拡張桁数(γ＋γ′)を求める。その差（infＣγ＋γ′−（supＣα′＋supＣβ＋β′））をδとすると、確定数の位置を±δ移動しても、誤差がＣγ＋γ′の範囲であれば、高精度コンピュータ数（確定数＋不確定数）を含むことになる。確定数の位置Ａを±δ移動すると、全体的には±δ誤差が大きくなるが、Ｃα′＋Ｃβ＋β′≦Ｃγ＋γ′を抑えるために、δの誤差を許容する。一方、このδの誤差を利用して確定数の下位の桁をトリムする。
【０１３１】
図２６は、トリム処理を説明するための図である。図２６に示すように、γの位置から斜線部分の先頭までの位置をオフセットしている。オフセット値は、γからオフセット値の桁以下を無視してもよいということを意味している。具体的な計算では、（γ−オフセット）桁以下をトリムする。これにより、計算値の桁数が大きくなるのを防ぐことができる。
【０１３２】
Ｃα＋α′＋Ｃβ＋β′≦Ｃγ＋γ′において、(α＋α′)と(β＋β′)とが一致するときに、γ＝２α、γ′＝α′となり、オフセット値は∞になる。実際には１６ビット整数の最大値である６５５３５（プログラム内ではbit16max）で表される。このとき、差分が０となるため、計算値の桁数が大きくなってしまう。この場合の処理については、後述する割り算と同じ処理を行い、(γ＋γ′)＋１/２５６を拡張絶対有効桁数にして、Ｃγ＋γ′とＣγ＋γ′＋１／２５６の差分を使って、計算値の桁数を抑制する。
【０１３３】
拡張桁数足し算表は、β(０から−３２までの整数）によって分類され、α′，β′に対してγ，γ′，差分の桁数を出力する。
【０１３４】
（１）β＝０，α′≧β′の場合、supＣα′＋supＣβ＋β′≦infＣγ＋γ′となる拡張桁数(γ＋γ′)を求め、その差（infＣγ＋γ′−（supＣα′＋supＣβ＋β′））を評価することにより、α′，β′，γ，γ′，及び、差分の桁数の表が作成される。
【０１３５】
（２）βが−１から−９の場合、（１）と同様に、supＣα′＋supＣβ＋β′≦infＣγ＋γ′となる拡張桁数(γ＋γ′)を求め、その差（infＣγ＋γ′−（supＣα′＋supＣβ＋β′））を評価することにより、α′，β′，γ，γ′，及び、差分の桁数の表が作成される。
【０１３６】
（３）βが−１０から−３２の場合、β′の値に関係なく、γ＝−βとなり、γ′=α′＋１となる。ただし、α′＝２５５のときは、γ＝−β＋１，γ′＝０となる。また、その差（infＣγ＋γ′−（supＣα′＋supＣβ＋β′））を評価することにより、α′，β′，γ，γ′，及び、差分の桁数の表が作成される。
【０１３７】
（４）βが−３３以下の場合、（３）と同様に、β′の値に関係なく、γ＝−βとなり、γ′=α′＋１となる。ただし、α′＝２５５のときは、γ＝−β＋１，γ′＝０となる。その差（infＣγ＋γ′−（supＣα′＋supＣβ＋β′））を評価することにより、α′，β′，γ，γ′，及び、差分の桁数の表が作成される。なお、差分の桁数は、９以下である。
【０１３８】
（５）β＝０，α′＝β′の場合、差分の桁数は６５５３５とする。これは符号なし単精度整数の最大値である。この場合、配列ａのトリム処理は行わない。
【０１３９】
図２７は、拡張桁数足し算表の一例を示す図である。図２７に示す表は、β＝０のときの、α′，β′の値に対する拡張桁数（γ＋γ′）、及びオフセット値を示している。４番目の列について、２２／２５６＋２０≦２１＋２/２５６となる最小の拡張桁数（γ＋γ′）であるか否かを検証する。左辺及び右辺の計算結果は、下記の通りである。
２２／２５６＋２０＝2.0054299011…
２１＋２/２５６＝2.010859802…
【０１４０】
また、２１＋１/２５６＝2.005422550…であるから、２１＋２/２５６が最小の値である。
【０１４１】
また、差分（２１＋２/２５６−（２２／２５６＋２０））は、0.0054299009…である。この値に２５６を掛けると1.3900546304となる。これは、差分の値を８ビット左に移動すると、先頭の位置がγの位置になることを示している。そのため、γから８ビット右に移動し、差分の桁数９未満を０にする。
【０１４２】
［掛け算］
実数Ａ及び実数Ｂをそれぞれ式（１１）及び式（１２）にて定義される高精度コンピュータ数とする。
【０１４３】
【数１５】
0006810437.tif 000017
【０１４４】
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃ＝２である。ｈａ＋ｈａ′，ｈｂ＋ｈｂ′はそれぞれ｜ａ１｜≦２ｈａ＋ｈａ′，｜ｂ１｜≦２ｈｂ＋ｈｂ′を満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示し、ｈａ′，ｈｂ′はそれぞれｈａ′／２５６，ｈｂ′／２５６である小数桁数を示す。ｅａ＋ｅａ′，ｅｂ＋ｅｂ′は拡張桁数である拡張絶対有効桁数を示し、ｅａ，ｅｂは整数である絶対有効桁数を示し、ｅａ′，ｅｂ′はそれぞれｅａ′／２５６，ｅｂ′／２５６の小数である小数桁数を示す。
【０１４５】
Ａ×Ｂは、下記式（３１）で表される。
【０１４６】
【数１６】
0006810437.tif 000018
【０１４７】
以下、ｈａ，ｈａ′，ｈｂ，ｈｂ′をそれぞれｍａ，ｍａ′，ｍｂ，ｍｂ′と表記して説明する。
【０１４８】
（１）Ａ＞０，Ｂ＞０である場合、ａ１≦Ｃｍａ＋ｍａ′，ｂ１≦Ｃｍｂ＋ｍｂ′であり、下記式（３２）〜（３４）を満たす。
【０１４９】
【数１７】
0006810437.tif 000019
【０１５０】
式（３２）〜（３４）を整理すると、下記式（３５）〜（３７）で表される。
【０１５１】
【数１８】
0006810437.tif 000020
【０１５２】
下記式（３８）とすると、式（３１）は下記式（３９）で表され、式（４０）を満たす拡張桁数を求めればよい。
【０１５３】
【数１９】
0006810437.tif 000021
【０１５４】
この拡張桁数を求めるには、下記式（４１）を満たす最小の拡張桁数を求めればよい。
【０１５５】
【数２０】
0006810437.tif 000022
【０１５６】
また、実数Ｂの不確定数ｂ２が０の場合、式（３８）は下記式（４２）となる。
【０１５７】
【数２１】
0006810437.tif 000023
【０１５８】
実数Ａ,Ｂの両方の不確定数が０の場合、γ→−∞となり、絶対有効桁数ｅの値は−３２７６８（0b1000000000000000)となる。実数Ａ,Ｂのどちらか一方の不確定数が０のときは、下位桁のトリム処理は行わない。
【０１５９】
（２）Ａ＞０，Ｂ＜０である場合、ａ１≦Ｃｍａ＋ｍａ′，−ｂ１≦Ｃｍｂ＋ｍｂ′であり、下記式（４３）〜（４５）を満たす。
【０１６０】
【数２２】
0006810437.tif 000024
【０１６１】
式（４３）〜（４５）を整理すると、下記式（４６）〜（４８）で表される。
【０１６２】
【数２３】
0006810437.tif 000025
【０１６３】
下記式（４９）とすると、式（３１）は下記式（５０）で表され、式（５１）を満たす拡張桁数を求めればよい。
【０１６４】
【数２４】
0006810437.tif 000026
【０１６５】
不確定数が０のときの扱いは、（１）Ａ＞０，Ｂ＞０のケースと同じである。
【０１６６】
（３）Ａ＜０，Ｂ＞０である場合、−ａ１≦Ｃｍａ＋ｍａ′，ｂ１≦Ｃｍｂ＋ｍｂ′であり、下記式（５２）〜（５４）を満たす。
【０１６７】
【数２５】
0006810437.tif 000027
【０１６８】
式（５２）〜（５４）を整理すると、下記式（５５）〜（５７）で表される。
【０１６９】
【数２６】
0006810437.tif 000028
【０１７０】
下記式（５８）とすると、式（３１）は下記式（５９）で表され、式（６０）を満たす拡張桁数を求めればよい。
【０１７１】
【数２７】
0006810437.tif 000029
【０１７２】
不確定数が０のときの扱いは、（１）Ａ＞０，Ｂ＞０のケースと同じである。
【０１７３】
（４）Ａ＜０，Ｂ＜０である場合、−ａ１≦Ｃｍａ＋ｍａ′，−ｂ１≦Ｃｍｂ＋ｍｂ′であり、下記式（６１）〜（６３）を満たす。
【０１７４】
【数２８】
0006810437.tif 000030
【０１７５】
式（６１）〜（６３）を整理すると、下記式（６４）〜（６６）で表される。
【０１７６】
【数２９】
0006810437.tif 000031
【０１７７】
下記式（６７）とすると、式（３１）は下記式（６８）で表され、式（６９）を満たす拡張桁数を求めればよい。
【０１７８】
【数３０】
0006810437.tif 000032
【０１７９】
不確定数が０のときの扱いは、（１）Ａ＞０，Ｂ＞０のケースと同じである。
【０１８０】
［割り算］
実数Ａ及び実数Ｂをそれぞれ式（１１）及び式（１２）にて定義される高精度コンピュータ数とする。
【０１８１】
【数３１】
0006810437.tif 000033
【０１８２】
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃ＝２である。ｈａ＋ｈａ′，ｈｂ＋ｈｂ′はそれぞれ｜ａ１｜≦２ｈａ＋ｈａ′，｜ｂ１｜≦２ｈｂ＋ｈｂ′を満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示し、ｈａ′，ｈｂ′はそれぞれｈａ′／２５６，ｈｂ′／２５６である小数桁数を示す。ｅａ＋ｅａ′，ｅｂ＋ｅｂ′は拡張桁数である拡張絶対有効桁数を示し、ｅａ，ｅｂは整数である絶対有効桁数を示し、ｅａ′，ｅｂ′はそれぞれｅａ′／２５６，ｅｂ′／２５６の小数である小数桁数を示す。
【０１８３】
Ｂ／Ａでは、拡張最大桁数（ｈａ＋ｈａ′，ｈｂ＋ｈｂ′）の代わりに、ｈａ＋ｈａ′−１／２５６，ｈｂ＋ｈｂ′−１／２５６を用い、下記式（７１）及び式（７２）にて定義される高精度コンピュータ数とする。
【０１８４】
【数３２】
0006810437.tif 000034
【０１８５】
Ｂ／Ａは、下記式（７３）で表される。
【０１８６】
【数３３】
0006810437.tif 000035
【０１８７】
式（７３）を評価する。
【０１８８】
【数３４】
0006810437.tif 000036
【０１８９】
この式（７４）は、Ｃｈａ＋ｈａ′−１／２５６−Ｃｅａ＋ｅａ′が０になることはない想定である。この値が０以下になるということは、Ａが０になる可能性があることを意味しているため、割算が成立しない。
【０１９０】
【数３５】
0006810437.tif 000037
【０１９１】
式（７５）を満たす拡張桁数（Ｈａ＋Ｈａ′）を求めると、下記式（７６）となる。Ｈａ＋Ｈａ′は、Ｃα′，Ｃβ＋β′に対して、Ｃα′−Ｃβ＋β′≧Ｃγ＋γ′を満たす最大の拡張桁数（γ＋γ′）を出力する拡張桁数引き算表を参照して求めることができる。
【０１９２】
【数３６】
0006810437.tif 000038
【０１９３】
次に、ｂ２ａ１−ｂ１ａ２をそれぞれの項に分けて評価する。ａ１＞０のとき下記式（７７）、ａ１＜０のとき下記式（７８）、ｂ１＞０のとき下記式（７９）、ｂ１＜０のとき下記式（８０）で表される。
【０１９４】
【数３７】
0006810437.tif 000039
【０１９５】
よって、ａ１＞０，ｂ１＞０のとき下記式（８１）、ａ１＞０，ｂ１＜０のとき下記式（８２）、ａ１＜０，ｂ１＞０のとき下記式（８３）、ａ１＜０，ｂ１＜０のとき下記式（８４）で表される。
【０１９６】
【数３８】
0006810437.tif 000040
【０１９７】
【数３９】
0006810437.tif 000041
【０１９８】
式（８５）を満たす拡張桁数（Ｈａｂ＋Ｈａｂ′）を求めると、下記式（８６）となる。
【０１９９】
【数４０】
0006810437.tif 000042
【０２００】
よって、式（７３）の第２項は下記式（８７）で表される。
【０２０１】
【数４１】
0006810437.tif 000043
【０２０２】
次に、ｂ１／ａ１の桁数について説明する。ｂ１／ａ１の桁数は、不確定部分の計算において、式（８５）を満たす拡張桁数（Ｈａ＋Ｈａ′）を求めるところの差分に丸め込むことができるので、丸め誤差以上の桁を求めておけばよい。丸め込みについて、下記式（８８）〜式（９０）用いて説明する。
【０２０３】
【数４２】
0006810437.tif 000044
【０２０４】
式（９０）のようにすると、ε以下の桁は丸めることができる。
【０２０５】
次に、不確定数が０のとき、すなわち、ｅａ，ｅｂが−∞のときの処理について説明する。
【０２０６】
（１）ｅａ＝−∞の場合
前述の式（７３）を評価するときの式（７４）において、式（７５）を満たす拡張桁数（Ｈａ＋Ｈａ′）を求めると、下記式（９１）となる。
【０２０７】
【数４３】
0006810437.tif 000045
【０２０８】
また、式（８５）を満たす拡張桁数（Ｈａｂ＋Ｈａｂ′）を求めると、下記式（９２）となる。
【０２０９】
【数４４】
0006810437.tif 000046
【０２１０】
このため、式（８８）の不等式は、式（９３）であるから、式（９４）となる。
【０２１１】
【数４５】
0006810437.tif 000047
【０２１２】
(９４)式において、（９５）式として（９６）式とする。そして、Ｃα＋α′とＣβ＋β′との差を使い、拡張絶対有効桁数のトリム処理を行う。
【０２１３】
【数４６】
0006810437.tif 000048
【０２１４】
図２８は、高精度コンピュータ数の割り算の確定数（ｂ１／ａ１）の位置を説明するための図である。ε＝Ｃβ＋β′−Ｃα＋α′以下でｂ１／ａ１を近似する。εの具体的な値は、infＣβ＋β−′supＣα＋α′値として求める。α′≦１３７の場合、オフセット値は９となり、α′＞１３７の場合、オフセット値は８となる。
【０２１５】
ｅｂ＝−∞の場合は。誤差は０となる。このため、外部から有効桁数の指定が必要である。
【０２１６】
（２）ｅａ≠−∞，ｅｂ＝−∞の場合
式（８５）を満たす拡張桁数（Ｈａｂ＋Ｈａｂ′）を求めると、下記式（９７）となる。
【０２１７】
【数４７】
0006810437.tif 000049
【０２１８】
このため、式（８８）の不等式は、式（９８）であるから、式（９９）となる。
【０２１９】
【数４８】
0006810437.tif 000050
【０２２０】
そして、（１）ｅａ＝−∞の場合と同様に、Ｃα＋α′とＣβ＋β′との差を使い、拡張絶対有効桁数のトリム処理を行う。
【０２２１】
［拡張桁数引き算表］
Ｃα′，Ｃβ＋β′に対して、Ｃα′−Ｃβ＋β′≧Ｃγ＋γ′を満たす最大の拡張桁数（γ＋γ′）を出力する拡張桁数引き算表について説明する。ここで、０≧βであり、α′，β′は、それぞれα′／２８，β′／２８である。０＝βのときは、α′≧β′とする。拡張桁数引き算表を用いることにより、例えば式（７５）を満たす拡張桁数（Ｈａ＋Ｈａ′）を求める場合、計算を高速化させることができる。
【０２２２】
図２９は、Ｃα′＝Ａ＋Ｂ（Ａ：確定数、Ｂ：不確定数）としたときのＡの３２ビット表現の一例である。Ｂは、−Ｃ−３１≦Ｂ＜Ｃ−３１である。ここで、α′は、α′／２８である。そして、Ｃα′＋Ｃβ＋β′の取りうる最小値を含むＣγ＋γ′の最大の拡張桁数を求める。具体的には、infＣα′−supＣβ＋β′≧supＣγ＋γ′となるＣγ＋γ′を求める。また、その差（supＣγ＋γ′−（infＣα′−supＣβ＋β′））を計算する。
【０２２３】
β＝０かつα′＝β′のときには、Ｃα′−Ｃβ＋β′≧Ｃ−∞である。γの取りうる値は、単精度整数の範囲であり、最も小さい値を−∞として扱う。その値は、２ビット表現で「0b1000000000000000」となる。
【０２２４】
図３０は、infＣα′−supＣβ＋β′の具体的な計算方法を説明するための図である。infＣα′とsupＣβ＋β′とを３２ビットで表し、supＣβ＋β′の最下位ビットを６４ビットの最下位ビットに合わせて、符号なし６４ビット整数で計算を行う。この処理であれば６４ビットの範囲を超えることはない。infＣα′とsupＣβ＋β′とを６４ビットにコピーし、infＣα′を−βビット左に移動させる。そして、これらの値の差を計算する。この差の計算において、最初が０ではないビットを求め、そのビットに対してsupＣγの最上位ビットの位置を合わせる。
【０２２５】
＜３．具体例＞
以下、高精度コンピュータ数による計算例について説明する。基数は２（Ｃ＝２）であり、指数部の拡張部（小数部）ｈａ′，ｈｂ′，ｅａ′，ｅｂ′，ｒ′はそれぞれｈａ′／２８（０≦ｈａ′＜２８），ｈｂ′／２８（０≦ｈｂ′＜２８），ｅａ′／２８（０≦ｅａ′＜２８），ｅｂ′／２８（０≦ｅｂ′＜２８），ｒ′／２８（０≦ｒ′＜２８）である。
【０２２６】
また、計算例では、倍精度浮動小数点表現を高精度コンピュータ数に変換し、高精度コンピュータ数を用いて計算を行った。倍精度浮動小数点表現を高精度コンピュータ数に変換する処理は、倍精度浮動小数点の符号、指数部を調べ、仮数部をコピーすることにより行われる。
【０２２７】
図３１は、倍精度浮動小数点表現を示す図であり、図３２は、１０進数の「０．１」を高精度コンピュータ数によりビット表現した一例を示す図である。図３２に示す高精度コンピュータ数において、ｓｉｇｎ（０）は、正の数、Ａｎ（２）は、３２ビットの配列の使用数が「２」であることを示す。ｈ（−４）は、最大桁数が「−４」であることを示し、ｈ′（１７４）は、最大桁数の拡張部（小数桁数）が「１７４」であることを示す。ｌ（５５）は、配列ａ［０］の最下位ビットが２進数で−５５桁であることを示す。
【０２２８】
ｅ（−５７）は、有効桁数が２進数で−５７まで有効であることを示す。１０進数で表すと、ｌｏｇ１０２＝０．３０１０２９９９５６６３９８１・・・であるから、ｌｏｇ１０２−５７＝−１７．１５８７０９７５２８４６９２８１・・・となり、１０進数で−１７桁まで有効であることを示す（図３２の４行目を参照）。
【０２２９】
配列ａ［１］,ａ［０］は、倍精度浮動小数点表現の仮数部（ｆｒａｃｔｉｏｎ）がそのまま代入される。なお、高精度コンピュータ数では、右詰めである。１０進数の「０．１」は、正確な値をコンピュータで表すことはできないため、４行目のような値になっている。
【０２３０】
１０進数の「０．１」を倍精度浮動小数点表現した仮数部を高精度コンピュータ数の配列に代入すると、下記配列（Ａ）となる。これは、図３３に示す高精度コンピュータ数の配列ａ［１］と配列ａ［０］とを連結したものである。
【０２３１】
0000000000001100110011001100110011001100110011001100110011001101  （Ａ）
先頭の１のビットは、最大桁数ｈであり、倍精度浮動小数点表現から計算で求めることができる。最大桁数の拡張部（小数桁数）ｈ′は、前述した拡張桁数表を参照して求めることができる。配列（Ａ）の先頭９ビットは「１１００１１００１」であり、その後ろの８ビットは「１００１１００１」である。この８ビットを使って、前述した「８ビット−α‘表」を参照することにより、最大桁数の拡張部ｈ′を求めることができる。「１００１１００１」は１０進数で１５３であり、「８ビット−α‘表」の１５３番目（先頭は０）の数値（１７４）を読み込む。
【０２３２】
２１７４／２５６を計算すると、１．６０１７９２７５５６８２６９３３５３７９３８４６２４１５９１となる。一方、配列（Ａ）の先頭３２ビットの値は、３４３５９７３８３６であり、この値を２３１で割ることにより、先頭の１ビット目を２進数の０桁目とすることができる。この値を求めると、１．５９９９９９９９９６２７４７０９７０１５３８０８５９３７５であるため、配列（Ａ）の先頭１の桁を２進数の０桁目とすると、配列（Ａ）は、２１７４／２５６で抑えることができることが分かる。配列（Ａ）の先頭は、２進数の桁で−４であるから、０．１≦２−４＋１７４／２５６を満たすこと分かる。
【０２３３】
実際に計算すると下記計算結果となり、２−４＋１７３／２５６≦０．１≦２−４＋１７４／２５６であることが分かる。
２−４＋１７４／２５６＝0.10011204723016833461211539009943
２−４＋１７３／２５６＝0.09984134986928919364142626838804
【０２３４】
［足し算］
図３３は、１０進数の「１．１」を高精度コンピュータ数によりビット表現した一例を示す図であり、図３４は、１０進数の「０．１」及び「１．１」を高精度コンピュータ数に変換した後、高精度コンピュータ数を用いて「０．１＋１．１」を計算した結果の一例を示す図である。
【０２３５】
図３４に示す高精度コンピュータ数において、ｈ（０）,ｈ′（６８）は、１．２≦２６８／２５６であること示している。実際に計算すると下記計算結果となり、２６７／２５６≦０．１≦２６８／２５６であることが分かる。
２６７／２５６＝1.19890616707438048177…
２６８／２５６＝1.2021567314527031420…
【０２３６】
また、計算結果の拡張絶対有効桁数ｅ（−５３），ｅ′（２３）は、「０．１」の高精度コンピュータ数の拡張絶対有効桁数ｅ（−５７），ｅ′（０）と、「１．１」の高精度コンピュータ数の拡張絶対有効桁数ｅ（−５３），ｅ′（０）とを使用し、２−５３＋２２／２５６≦２−５７＋２−５３≦２−５３＋２３／２５６であることを示している。両辺に２５３を掛けて、実際に計算すると下記計算結果となり、２２２／２５６≦２−４＋１≦２２３／２５６であることが分かる。
２２２／２５６＝1.061377227289262…
２−４＋１＝1.0625
２２３／２５６＝1.0642549128844645…
【０２３７】
次に、オフセット値を求める。
0.1＝0.100000000 0000000055 5111512312 +α  |α|≦２−５７
1.1＝1.10000000 0000000088 8178419700 +β  |β|≦２−５３
1.2＝1.20000000000000009436895709312 +α＋β
【０２３８】
ここで、α＋β≦２−５７＋２−５３＝２−５３（２−４＋１）であるから、（１＋２−４）≦２γ′／２５６を満たす最小のγ′を求める。（１＋２−４）において１＝２０，２−４＝２−４であり、α′＝０、β＝−４、β′＝０であるから、この値から前述した拡張桁数足し算表を参照し、γ′，差分の桁数（オフセット値）を求める。
【０２３９】
拡張桁数足し算表の値（γ′＝２３）を使うと（１＋２−４）≦２２３／２５６であり、実際に両辺をそれぞれ計算すると下記計算結果となる。
１＋２−４＝1.0625
２２３／２５６＝1.0642549128844645497886112570016
【０２４０】
また、拡張桁数足し算表のオフセット値は１０である。差分の計算結果は下記通りである。
２２３／２５６−（１＋２−４）＝0.00175491288446454978861125700158
【０２４１】
これに２１０を掛けた計算結果は、下記の通りである。
1.7970307936916989835379271696181
【０２４２】
２進数で表したときの小数点以下は、「.0000000001********」となり、「1********」以下は切り捨てることができる。これは、２進数で−５３桁目から１０桁以下を切り捨ててもよいことを示している。これによって最小桁数ｌは、−５５桁となっており、絶対有効桁数ｅ（−５３）以下となっている。２進数で−５５桁以下がもともと０である。
【０２４３】
図３５は、１０進数の「０．１×１．１」を浮動小数点で計算し、高精度コンピュータ数に変換した結果の一例を示す図である。高精度コンピュータ数に変換して計算した方が、精度が幾分向上していることが分かる。
【０２４４】
図３６は、１０進数の「０．００００００１」を高精度コンピュータ数によりビット表現した一例を示す図であり、図３７は、１０進数の「１．０」を高精度コンピュータ数によりビット表現した一例を示す図である。また、図３８は、１０進数の「０．００００００１」及び「１．０」を高精度コンピュータ数に変換した後、高精度コンピュータ数を用いて「１．０」に「０．００００００１」を１００回加算した結果の一例を示す図である。絶対有効桁数ｅ（−５３）に変化はなく、小数桁数ｅ′のみが１００になっていることが分かる。第１の実施の形態のコンピュータ数の繰り返し計算では、一回ごとに絶対有効桁数ｅの値が３程度増えるため、１００回たし算を行うと、有効桁数の意味がなくなっていたが、高精度コンピュータ数により改善することができる。
【０２４５】
また、図３９は、「１．０」に「０．００００００１」を１００回加算する計算を浮動小数点で行い、その結果を高精度コンピュータ数に変換した結果の一例を示す図である。有効桁数が１０進で１５桁になっている。
【０２４６】
［掛け算］
図４０は、１０進数の「０．１」及び「１．１」を高精度コンピュータ数に変換し、高精度コンピュータ数を用いて「０．１×１．１」を計算した結果の一例を示す図である。
【０２４７】
図４０に示す高精度コンピュータ数において、ｈ（−４）,ｈ′（２０９）は、０．１１≦２−４＋２０９／２５６であること示している。実際に計算すると下記計算結果となり、２−４＋２０８／２５６≦０．１１≦２−４＋２０９／２５６であることが分かる。
２−４＋２０８／２５６＝0.1097657600233312…
２−４＋２０９／２５６＝0.11006336518984898…
【０２４８】
図４０に示す高精度コンピュータ数において、ｅ（−５６），ｅ′（１１２）は、２５７Ｃ′≦２５７（２−５６＋１１２／２５６）あることを示している。また、Ａ，Ｂ共に正であるときの式（３８）に示すＣ′の具体的な計算結果は、下記の通りである。
【０２４９】
【数４９】
0006810437.tif 000051
Ｃ′＝２０−５７＋３６／２５６＋０＋２−４−５３＋１７４／２５６＋０＋２−５７−５３＋０＋０
Ｃ′＝２−５７＋３６／２５６＋２−５７＋１７４／２５６＋２−１１０
２５７Ｃ′＝２３６／２５６＋２１７４／２５６＋２−５３
【０２５０】
実際に計算すると下記計算結果となり、２５７（２−５６＋１１１／２５６）≦２５７Ｃ′≦２５７（２−５６＋１１２／２５６）であることが分かる。また、ｅ（−５６），ｅ′（１１２）は、Ｃ′≦Ｃγ＋γ′を満たす最小の拡張桁数であり、拡張有効桁数（ｅ＋ｅ′／２５６）であることが分かる。
２５７（２−５６＋１１２／２５６）＝2.708511093873…
２５７Ｃ′＝2.704175338990…
２５７（２−５６＋１１１／２５６）＝2.701187431…
【０２５１】
また、オフセット値は９であるから、最小桁数がｌ（−６３）であり、ｅ（−５６）よりも小さくなっている。この桁以下は０が２以上連続しているものと想定される。
【０２５２】
図４１は、１０進数の「０．１×１．１」を浮動小数点で計算し、高精度コンピュータ数に変換した結果の一例を示す図である。高精度コンピュータ数による計算結果は、浮動小数点による計算結果と同様であることが分かる。
【０２５３】
図４２は、１０進数の「０．００００００１」を「１．１」に１００回かける計算を高精度コンピュータ数で計算した結果の一例を示す図である。図４２に示す計算結果と、図３３に示す「１．１」の高精度コンピュータ数との、有効桁数を比較する。有効桁数は、ｌｏｇＣ｜確定数｜−拡張絶対有効桁数（γ＋γ′）≦ｋとなる最小の整数である。
図３３：(0+36/256)-(-53)=53＋36/256
図４２：(-2326+202/256)-(-2372+1/256)=43+203/256
【０２５４】
有効桁数が６＋８９／２５６ほど低下しているが、第１の実施形態におけるコンピュータ数と比較して改善されている。
【０２５５】
［割り算］
図４３は、１０進数の「１」及び「３」を高精度コンピュータ数に変換し、高精度コンピュータ数を用いて「１÷３」を計算した結果の一例を示す図である。１と３は不確定数部分がないため（ｅａ＝−∞，ｅｂ＝−∞）、拡張絶対有効桁数を−１００に指定した。
【０２５６】
図４４は、分母である１０進数の「０．１」を高精度コンピュータ数によりビット表現した一例を示す図であり、図４５は、分子である１０進数の「１」を高精度コンピュータ数によりビット表現した一例を示す図である。また、図４６は、高精度コンピュータ数を用いて「１÷０．１」を計算した結果の一例を示す図である。１は不確定数部分がないため、分子の不確定数が０のケース（ｅａ≠−∞，ｅｂ＝−∞）で計算を行う。
【０２５７】
【数５０】
0006810437.tif 000052
【０２５８】
上記式（７５）において、ｈａ＋ｈａ′−１／２５６，ｅａ＋ｅａ′を計算すると下記の通りとなる。
ｈａ＋ｈａ′−１／２５６＝−４＋１７３／２５６
ｅａ＋ｅａ′＝−５７
【０２５９】
そして、この数値を用い、前述した拡張桁数引き算表を参照してＨａ＋Ｈａ′を求める。ｈａに対してｅａが小さいため、ｈａ＋ｈａ′−１／２５６から１／２５６を引いた値となる。
Ｈａ＋Ｈａ′＝−４＋１７２／２５６
【０２６０】
【数５１】
0006810437.tif 000053
【０２６１】
上記式（９９）において、（ｈｂ＋ｅａ−Ｈａ−ｈａ）＋（ｈｂ′＋ｅａ′−Ｈａ′−ｈａ′＋１／２５６）は、−５１＋１６８／２５６となり、拡張絶対有効桁数ｅ（−５１），ｅ′（１６９）の計算結果となる。オフセット値は８であるため、最小桁数ｌ（−５３）に対して拡張絶対有効桁数が大きくなっている。
【０２６２】
図４７は、分母である１０進数の「０．１」を高精度コンピュータ数によりビット表現した一例を示す図であり、図４８は、分子である１０進数の「０．２」を高精度コンピュータ数によりビット表現した一例を示す図である。また、図４９は、高精度コンピュータ数を用いて「０．２÷０．１」を計算した結果の一例を示す図である。分子及び分母の不確定数が０ではないケース（ｅａ≠−∞，ｅｂ≠−∞）で計算を行う。
【０２６３】
【数５２】
0006810437.tif 000054
【０２６４】
上記式（７５）において、ｈａ＋ｈａ′−１／２５６，ｅａ＋ｅａ′を計算すると下記の通りとなる。
ｈａ＋ｈａ′−１／２５６＝−４＋１７３／２５６
ｅａ＋ｅａ′＝−５７
【０２６５】
そして、この数値を用い、前述した拡張桁数引き算表を参照してＨａ＋Ｈａ′を求める。ｈａに対してｅａが小さいため、ｈａ＋ｈａ′−１／２５６から１／２５６を引いた値となる。
Ｈａ＋Ｈａ′＝−４＋１７２／２５６
【０２６６】
【数５３】
0006810437.tif 000055
【０２６７】
上記式（８９）において、指数部の下記２つの値を算出する。
（ｅｂ−Ｈａ）＋（ｅｂ′−Ｈａ′＋１／２５６）＝−５３＋８５／２５６
（ｈｂ＋ｅａ−Ｈａ−ｈａ）＋（ｈｂ′＋ｅａ′−Ｈａ′−ｈａ′＋１／２５６）＝−５３＋８５／２５６
【０２６８】
これらの２つの値は、差分が存在しないため、オフセット値が∞のときの方法で、計算結果の拡張絶対有効桁数は、−５２＋８５／２５６に１/２５６をプラスした値になる（ｅ（−５２），ｅ′（８６））。
【符号の説明】
【０２６９】
１１  入力部、１２  格納部、１３  演算部、１４  制御部、２１  ＣＰＵ、２２  ＧＰＵ、２３  ＲＯＭ、２４  ＲＡＭ、２５  操作入力部、２６  ストレージ、２７  入出力インターフェース、３１  入力部、３２  格納部、３３  演算部、３４  制御部、
【要約】
精度保証付き数値計算を簡便に行うことができる情報処理装置、プログラム、及び情報処理方法を提供する。
下記式（１）及び式（２）にて実数Ａ及び実数Ｂがそれぞれ定義されたコンピュータ数の確定数ａ１，ｂ１を用いて演算し、下記（３）式を満たすように絶対有効桁数γを決定する。
Ａ＝ａ１＋ａ２，｜ａ１｜≦Ｃｈａ，−Ｃｅａ≦ａ２＜Ｃｅａ・・・式（１）
Ｂ＝ｂ１＋ｂ２，｜ａ１｜≦Ｃｈｂ，−Ｃｅｂ≦ｂ２＜Ｃｅｂ・・・式（２）
（Ａ，Ｂ）＝（ａ，ｂ）１＋（ａ，ｂ）２，−Ｃγ≦（ａ，ｂ）２＜Ｃγ・・・式（３）
ここで、ａ１，ｂ１は数値が確定した確定数であり、ａ２，ｂ２は数値が確定していない不確定数である。Ｃは基数を示す。ｈａ，ｈｂはそれぞれ｜ａ１｜≦Ｃｈａ，｜ｂ１｜≦Ｃｈｂを満たす最小の拡張桁数である拡張最大桁数を示し、ｈａ，ｈｂは整数である最大桁数を示す。ｅａ，ｅｂ，γは整数である絶対有効桁数を示す。【図１】
0006810437.tif 000062
【図２】
0006810437.tif 000063
【図３】
0006810437.tif 000064
【図４】
0006810437.tif 000065
【図５】
0006810437.tif 000066
【図６】
0006810437.tif 000067
【図７】
0006810437.tif 000068
【図８】
0006810437.tif 000069
【図９】
0006810437.tif 000070
【図１０】
0006810437.tif 000071
【図１１】
0006810437.tif 000072
【図１２】
0006810437.tif 000073
【図１３】
0006810437.tif 000074
【図１４】
0006810437.tif 000075
【図１５】
0006810437.tif 000076
【図１６】
0006810437.tif 000077
【図１７】
0006810437.tif 000078
【図１８】
0006810437.tif 000079
【図１９】
0006810437.tif 000080
【図２０】
0006810437.tif 000081
【図２１】
0006810437.tif 000082
【図２２】
0006810437.tif 000083
【図２３】
0006810437.tif 000084
【図２４】
0006810437.tif 000085
【図２５】
0006810437.tif 000086
【図２６】
0006810437.tif 000087
【図２７】
0006810437.tif 000088
【図２８】
0006810437.tif 000089
【図２９】
0006810437.tif 000090
【図３０】
0006810437.tif 000091
【図３１】
0006810437.tif 000092
【図３２】
0006810437.tif 000093
【図３３】
0006810437.tif 000094
【図３４】
0006810437.tif 000095
【図３５】
0006810437.tif 000096
【図３６】
0006810437.tif 000097
【図３７】
0006810437.tif 000098
【図３８】
0006810437.tif 000099
【図３９】
0006810437.tif 000100
【図４０】
0006810437.tif 000101
【図４１】
0006810437.tif 000102
【図４２】
0006810437.tif 000103
【図４３】
0006810437.tif 000104
【図４４】
0006810437.tif 000105
【図４５】
0006810437.tif 000106
【図４６】
0006810437.tif 000107
【図４７】
0006810437.tif 000108
【図４８】
0006810437.tif 000109
【図４９】
0006810437.tif 000110