(57)【要約】【課題】計算装置であって、入力された計算式の状況に応じて対数関数や指数関数の計算処理を適切に行い、桁落ちのない高精度な計算結果を得ること。【解決手段】所望の計算式を伴う計算依頼に応じた計算処理の過程において、対数関数の［log1p(x)］関数や指数関数の［exp(x)-1］関数によるテイラー展開を使用した高精度な計算処理が必要と仮定される「１±数値」部分や「exp(数値)−１」部分を検知してその内容を状況検知レジスタ１２b4で保持し、当該レジスタ１２b4で保持された数値が１未満であると判断された場合には前記［log1p(x)］関数や［exp(x)-1］関数による高精度な計算処理を行い、１以上であると判断された場合には［log(x)］関数や［exp(x)]関数による通常の対数関数計算処理や通常の指数関数計算処理を行うことで、あらゆる計算において対数関数や指数関数の計算処理が適切に行われるようにした。【選択図】      図４
2006163529.tif 000002
【特許請求の範囲】
【請求項１】
関数を含む計算式を計算する計算装置であって、
入力された計算式を記憶する計算式記憶手段と、
この計算式記憶手段により記憶された計算式に、１と数値との加減算の計算式部分が含まれているか否かを検知する計算式部分検知手段と、
この計算式部分検知手段により前記計算式に、１と数値との加減算の計算式部分が含まれていると検知された場合に、この検知された計算式部分の数値を記憶する検知数値記憶手段と、
前記計算式記憶手段により記憶された計算式に前記計算式部分検知手段により検知された計算式部分を引数とする対数関数が含まれているか否かを検知する対数関数検知手段と、
この対数関数検知手段により前記計算式に前記計算式部分を引数とする対数関数が含まれていると検知された場合に、前記検知数値記憶手段により記憶された数値の絶対値が１未満であるか否かを検知する１未満検知手段と、
この１未満検知手段により前記数値の絶対値が１未満であると検知された場合に、前記検知数値記憶手段に記憶された数値を直接用いて高精度に対数関数の計算を行う高精度対数計算手段と、
前記１未満検知手段により前記数値の絶対値が１未満でないと検知された場合に、前記計算式部分検知手段により検知された計算式部分の計算結果を用いて対数関数の計算を行う通常対数計算手段と、
を備えたことを特徴とする計算装置。
【請求項２】
さらに、
入力された計算数値の有効桁数を記憶する桁数記憶手段を備え、
前記高精度対数計算手段および前記通常対数計算手段は、前記桁数記憶手段により記憶された有効桁数に従って対数関数の計算を行うことを特徴とする請求項１に記載の計算装置。
【請求項３】
前記検知数値記憶手段は、前記計算式部分検知手段により前記計算式に、１と数値との加減算の計算式部分が含まれていると検知された場合に、この検知された計算式部分の数値を指数部と仮数部にして記憶すると共に当該計算式部分の検知を示す識別フラグを記憶し、
前記対数関数検知手段は、前記計算式記憶手段により記憶された計算式について、前記検知数値記憶手段により記憶された識別フラグが示すところの計算式部分を引数とする対数関数が含まれているか否かを検知し、
前記１未満検知手段は、前記検知数値記憶手段により指数部と仮数部として記憶された数値の絶対値が１未満であるか否かを検知する、
ことを特徴とする請求項１または請求項２に記載の計算装置。
【請求項４】
前記計算式記憶手段は、入力された計算式に変数とその変数の設定値が含まれる場合に、当該計算式をその変数に設定値を代入した計算式に書き換えて記憶する書き換え記憶手段を有することを特徴とする請求項１乃至請求項３の何れか１項に記載の計算装置。
【請求項５】
関数を含む計算式を計算する計算装置であって、
入力された計算式を記憶する計算式記憶手段と、
この計算式記憶手段により記憶された計算式に、数値の指数関数計算の後１を減じる計算式部分が含まれているか否かを検知する指数関数計算部分検知手段と、
この指数関数計算部分検知手段により前記計算式に、数値の指数関数計算の後１を減じる計算式部分が含まれていると検知された場合に、この検知された計算式部分の数値を記憶する検知数値記憶手段と、
この検知数値記憶手段により記憶された数値の絶対値が１未満であるか否かを検知する１未満検知手段と、
この１未満検知手段により前記数値の絶対値が１未満であると検知された場合に、前記指数関数計算の後１を減じる計算を直接的に高精度に行う高精度指数計算手段と、
前記１未満検知手段により前記数値の絶対値が１未満でないと検知された場合に、前記数値の指数関数計算を行った結果に１を減じる通常の指数関数の計算を行う通常指数計算手段と、
を備えたことを特徴とする計算装置。
【請求項６】
さらに、
入力された計算数値の有効桁数を記憶する桁数記憶手段を備え、
前記高精度指数計算手段および前記通常指数計算手段は、前記桁数記憶手段により記憶された有効桁数に従って指数関数の計算を行うことを特徴とする請求項５に記載の計算装置。
【請求項７】
前記計算式記憶手段は、入力された計算式に変数とその変数の設定値が含まれる場合に、当該計算式をその変数に設定値を代入した計算式に書き換えて記憶する書き換え記憶手段を有することを特徴とする請求項５または請求項６に記載の計算装置。
【請求項８】
関数を含む計算式を計算する計算装置であって、
入力された計算式を記憶する計算式記憶手段と、
この計算式記憶手段により記憶された計算式に、１と数値との加減算の計算式部分が含まれているか否かを検知する計算式部分検知手段と、
この計算式部分検知手段により前記計算式に、１と数値との加減算の計算式部分が含まれていると検知された場合に、この検知された計算式部分の数値を記憶する第１の検知数値記憶手段と、
前記計算式記憶手段により記憶された計算式に前記計算式部分検知手段により検知された計算式部分を引数とする対数関数が含まれているか否かを検知する対数関数検知手段と、
この対数関数検知手段により前記計算式に前記計算式部分を引数とする対数関数が含まれていると検知された場合に、前記第１の検知数値記憶手段により記憶された数値の絶対値が１未満であるか否かを検知する第１の１未満検知手段と、
この第１の１未満検知手段により前記数値の絶対値が１未満であると検知された場合に、前記第１の検知数値記憶手段に記憶された数値を直接用いて高精度に対数関数の計算を行う対数関数高精度対数計算手段と、
前記第１の１未満検知手段により前記数値の絶対値が１未満でないと検知された場合に、前記計算式部分検知手段により検知された計算式部分の計算結果を用いて対数関数の計算を行う対数関数通常計算手段と、
前記計算式記憶手段により記憶された計算式に、数値の指数関数計算の後１を減じるの計算式部分が含まれているか否かを検知する指数関数計算部分検知手段と、
この指数関数計算部分検知手段により前記計算式に、数値の指数関数計算の後１を減じる計算式部分が含まれていると検知された場合に、この検知された計算式部分の数値を記憶する第２の検知数値記憶手段と、
この第２の検知数値記憶手段により記憶された数値の絶対値が１未満であるか否かを検知する第２の１未満検知手段と、
この第２の１未満検知手段により前記数値の絶対値が１未満であると検知された場合に、前記指数関数計算の後１を減じる計算を直接的に高精度に行う指数関数高精度計算手段と、
前記第２の１未満検知手段により前記数値の絶対値が１未満でないと検知された場合に、前記数値の指数関数計算を行った結果に１を減じる通常の指数関数の計算を行う指数関数通常計算手段と、
を備えたことを特徴とする計算装置。
【請求項９】
前記計算式記憶手段は、入力された計算式にべき乗の計算式が含まれる場合に、当該べき乗の計算式をその公式に従った指数関数と対数関数の組合せからなる計算式に変換して記憶するべき乗計算変換記憶手段を有することを特徴とする請求項８に記載の計算装置。
【請求項１０】
計算装置のコンピュータを制御するための計算処理プログラムであって、
前記コンピュータを、
入力された計算式を計算式メモリに記憶させる計算式記憶手段、
前記計算式メモリに記憶された計算式に、１と数値との加減算の計算式部分が含まれているか否かを検知する計算式部分検知手段、
この計算式部分検知手段により前記計算式に、１と数値との加減算の計算式部分が含まれていると検知された場合に、この検知された計算式部分の数値を数値レジスタに記憶させる検知数値記憶手段、
前記計算式メモリに記憶された計算式に前記計算式部分検知手段により検知された計算式部分を引数とする対数関数が含まれているか否かを検知する対数関数検知手段、
この対数関数検知手段により前記計算式に前記計算式部分を引数とする対数関数が含まれていると検知された場合に、前記数値レジスタに記憶された数値の絶対値が１未満であるか否かを検知する１未満検知手段、
この１未満検知手段により前記数値の絶対値が１未満であると検知された場合に、前記検知数値記憶手段に記憶された数値を直接用いて高精度に対数関数の計算を行う高精度対数計算手段、
前記１未満検知手段により前記数値の絶対値が１未満でないと検知された場合に、前記計算式部分検知手段により検知された計算式部分の計算結果を用いて対数関数の計算を行う通常対数計算手段、
として機能させるようにしたコンピュータ読み込み可能な計算処理プログラム。
【請求項１１】
計算装置のコンピュータを制御するための計算処理プログラムであって、
前記コンピュータを、
入力された計算式を計算式メモリに記憶させる計算式記憶手段、
前記計算式メモリに記憶された計算式に、数値の指数関数計算の後１を減じる計算式部分が含まれているか否かを検知する指数関数計算部分検知手段、
この指数関数計算部分検知手段により前記計算式に、数値の指数関数計算の後１を減じる計算式部分が含まれていると検知された場合に、この検知された計算式部分の数値を数値レジスタに記憶させる検知数値記憶手段、
前記数値レジスタに記憶された数値の絶対値が１未満であるか否かを検知する１未満検知手段、
この１未満検知手段により前記数値の絶対値が１未満であると検知された場合に、前記指数関数計算の後１を減じる計算を直接的に高精度に行う高精度指数計算手段、
前記１未満検知手段により前記数値の絶対値が１未満でないと検知された場合に、前記数値の指数関数計算を行った結果に１を減じる通常の指数関数の計算を行う通常指数計算手段、
として機能させるようにしたコンピュータ読み込み可能な計算処理プログラム。
【請求項１２】
関数を含む計算式を計算する計算装置に用いられる数値形式データのデータ構造であって、
前記数値形式データは、計算装置に入力された計算式に、１と数値との加減算の計算式部分が含まれていると検知された場合に、この検知された計算式部分の数値が格納される数値部と、前記計算式部分の検知を示す識別フラグとを含んで構成され、
前記計算装置に入力された計算式について、前記識別フラグが示すところの計算式部分を引数とする対数関数が含まれていると検知された場合に、前記数値部に格納された数値の絶対値が１未満であると検知された場合は前記数値部に格納された数値を直接用いて高精度に対数関数の計算が行われ、１未満でないと検知された場合は前記検知された計算式部分の計算結果を用いて対数関数の計算が行われる、
ことを特徴とする計算装置に用いられる数値形式データのデータ構造。
【請求項１３】
関数を含む計算式を計算する計算装置に用いられる数値形式データのデータ構造であって、
前記数値形式データは、計算装置に入力された計算式に、数値の指数関数計算の後１を減じる計算式部分が含まれていると検知された場合に、この検知された計算式部分の数値が格納される数値部を含んで構成され、
前記数値形式データの数値部に格納された数値の絶対値が１未満であると検知された場合は前記指数関数計算の後１を減じる計算が直接的に高精度に行われ、１未満でないと検知された場合は前記数値の指数関数計算を行った結果に１を減じる通常の指数関数の計算が行われる、
ことを特徴とする計算装置に用いられる数値形式データのデータ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、対数関数の計算および指数関数の計算を高精度に行うための計算装置、計算処理プログラム、およびそのデータ構造に関する。
【背景技術】
【０００２】
従来の計算装置において、対数関数の計算は非常に複雑な処理を必要とするために高速化の妨げとなっていたが、これを高速に計算するためのひとつの手法として、ＩＥＥＥ（米国電気電子学会）の浮動小数点精度に一致した数値確度を達成しながら、自然対数を計算するために使用する近似の複雑性を低下させるようにしたものが考えられている（例えば、特許文献１参照。）。
【０００３】
そしてこのような対数関数の計算装置では、計算処理の高速化と共に高精度化が要求されるが、特に、対数関数［log(1+x)］を使用する計算では、xの値が“１”未満（０＜｜ｘ｜＜１）と小さい場合に、まずカッコ内の“１＋ｘ”の計算において設定有効桁数に応じた桁落ちが発生するため、誤差が大きくなる問題がある。
【０００４】
例えば、１０進１６桁演算において、ｘ＝1.23456789E-17で［log(1+x)］を求める場合の代入式は［log(1+1.23456789E-17)］であるが、まずカッコ内の“１＋ｘ”の計算の段階での桁落ちによって［log(1)=0］となってしまう。桁落ちが発生しない場合、正しくは［log(1+1.23456789E-17)=1.23456789E-17］となる。
【０００５】
このような誤算を防ぐためＣ言語では、［log(x)］関数とは別に、関数の変数の部分にそのままｘを与えて計算することのできる［log1p(x)(=log(1+x)］関数をプログラム上で定義し、以下のテイラー展開式でｘを直接代入した計算を実行することで、ｘの値が小さくても桁落ちしない計算が行えるようにしている。
【０００６】
log(1+x)=x-(1/2)x^2+(1/3)x^3-(1/4)x^4+…      (|x|<1)
なお、この明細書中の計算式の記述において［^］の記号の直後の数値は累乗の指数を示し、例えば［x^2]はｘの二乗を意味する。
【０００７】
一方、前記対数関数の逆関数である指数関数の計算処理についても同様に、特に、指数関数［exp(x)-1］を使用する計算では、xの値が“１”未満（０＜｜ｘ｜＜１）と小さい場合に、まず“exp(x)”の計算において計算結果が１の近傍の値となり、その後の“ exp(x)−１”の計算において設定有効桁数に応じた桁落ちが発生するため、誤差が大きくなる問題がある。
【０００８】
例えば、１０進１６桁演算において、ｘ＝1.23456789E-17で［exp(x)-1］を求める場合の代入式は［exp(1.23456789E-17)-1］であるが、まず“exp(1.23456789E-17)”の計算の段階での桁落ちによって［exp(1.23456789E-17)=1］となってしまう。そして、［exp(1.23456789E-17)-1＝0］となり、桁落ちにより計算結果が０になる。桁落ちが発生しない場合、正しくは［exp(1.23456789E-17)-1=1.23456789E-17］となる。
【０００９】
このため、この指数関数についても［exp(x)]関数とは別に、［exp(x)-1］関数をＣ言語プログラム上で定義し、以下のテイラー展開式で計算を実行することで、桁落ちしない計算が行えるようにしている。
【００１０】
exp(x)-1=(1/1!)x+(1/2!)x^2+(1/3!)x^3+(1/4!)x^4+…
【特許文献１】特開２００１−３０６３０１号
【発明の開示】
【発明が解決しようとする課題】
【００１１】
このように、対数関数については［log1p(x)］関数を用いることにより精度の高い対数計算が行えるが、数値計算毎にプログラマーが［log1p(x)］関数と［log(x)］関数とを意識して使い分ける必要があり、特に、［log(a+x)］で例えばａ＝３となったりａ＝１となったり変化する場合に適切な使い分けを行うことは非常に難しい問題がある。
【００１２】
また、指数関数については［exp(x)-1］関数を用いることにより精度の高い指数計算が行えるが、数値計算毎にプログラマーが［exp(x)-1]関数と［exp(x)]関数とを意識して使い分ける必要があり、特に、［exp(x)-a］で例えばａ＝３となったりａ＝１となったり変化する場合に適切な使い分けを行うことは非常に難しい問題がある。
【００１３】
また、計算式中に［10^x］や［ｘ＾ｙ］が含まれる場合にも、これらの式は前記指数関数および対数関数に変換されて計算処理されるため、前記同様の問題がある。
【００１４】
そして、このような［log(1+x)］［exp(x)-1］［10^x］［ｘ＾ｙ］を使用する計算は複利計算、積み立て計算など、様々な分野で頻繁に発生するため大きな問題である。
【００１５】
本発明は、このような問題に鑑みてなされたもので、入力された計算式の状況に応じて対数関数や指数関数の計算処理を適切に行い、桁落ちのない高精度な計算結果を得ることが可能になる計算装置、計算処理プログラム、およびそのデータ構造を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明の請求項１（請求項１０）に記載の計算装置（計算処理プログラム）では、計算式記憶手段により記憶された計算式について、１と数値との加減算の計算式部分が含まれていることが計算式部分検知手段によって検知された場合は、この検知された計算式部分の数値が検知数値記憶手段によって記憶される。そして、前記計算式に前記計算式部分を引数とする対数関数が含まれていることが対数関数検知手段によって検知された場合に、前記検知数値記憶手段により記憶された数値の絶対値が１未満であることが１未満検知手段によって検知された場合は、高精度対数計算手段によって前記検知数値記憶手段に記憶された数値が直接用いられて高精度な対数関数計算が行われ、１未満でないと検知された場合は、通常対数計算手段によって前記計算式部分検知手段により検知された計算式部分の計算結果を用いた対数関数計算が行われる。
【００１７】
これによれば、計算式に含まれる対数関数の引数である１と数値との加減算の計算式部分における「数値」が１未満と小さいか否かを適切に判断して、［log(1+x)］関数を使用した高精度な対数関数の計算と［log(x)］関数を使用した通常の対数関数の計算とが的確に切り換えられることになる。
【００１８】
本発明の請求項５（請求項１１）に記載の計算装置（計算処理プログラム）では、計算式記憶手段により記憶された計算式について、数値の指数関数計算の後１を減じる計算式部分が含まれていることが指数関数計算部分検知手段によって検知された場合は、この検知された計算式部分の数値が検知数値記憶手段によって記憶され、この検知数値記憶手段により記憶された数値の絶対値が１未満であることが１未満検知手段によって検知された場合は、高精度指数計算手段によって前記指数関数計算の後１を減じる計算が直接的に高精度に行われ、１未満でないと検知された場合は、通常指数計算手段によって前記数値の指数関数計算を行った結果に１を減じる通常の指数関数計算が行われる。
【００１９】
これによれば、計算式に含まれる数値の指数関数計算の後１を減じる計算式部分における「数値」が１未満と小さいか否かを適切に判断して、［exp(x)-1］関数を使用した高精度な指数関数の計算と［exp(x)]関数を使用した通常の指数関数の計算とが的確に切り換えられることになる。
【発明の効果】
【００２０】
本発明の請求項１（請求項１０）に記載の計算装置（計算処理プログラム）によれば、計算式に含まれる対数関数の引数である１と数値との加減算の計算式部分における「数値」が１未満と小さいか否かを適切に判断して、［log(1+x)］関数を使用した高精度な対数関数の計算と［log(x)］関数を使用した通常の対数関数の計算とを的確に切り換えた計算処理を行うことができる。
【００２１】
本発明の請求項５（請求項１１）に記載の計算装置（計算処理プログラム）によれば、計算式に含まれる数値の指数関数計算の後１を減じる計算式部分における「数値」が１未満と小さいか否かを適切に判断して、［exp(x)-1］関数を使用した高精度な指数関数の計算と［exp(x)]関数を使用した通常の指数関数の計算とを的確に切り換えた計算処理を行うことができる。
【００２２】
よって本発明によれば、入力された計算式の状況に応じて対数関数や指数関数の計算処理を適切に行い、桁落ちのない高精度な計算結果を得ることが可能になる計算装置、計算処理プログラム、およびそのデータ構造を提供できる。
【発明を実施するための最良の形態】
【００２３】
以下図面により本発明の実施の形態について説明する。
【００２４】
図１は、本発明の実施形態に係わる電子計算装置１０の電子回路の構成を示すブロック図である。
【００２５】
この電子計算装置１０は、コンピュータ等からなる制御部（ＣＰＵ）１１を備えている。
【００２６】
制御部（ＣＰＵ）１１は、直接接続されたＰＣ（パーソナルコンピュータ）端末２０Ａやインターネットなどの通信ネットワークＮを介して接続されたＰＣ端末２０Ｂからの計算依頼信号に応じて、メモリ１２内のＲＯＭ１２Ａに予め記憶されている計算処理プログラム１２a1、あるいは外部記録媒体１３から記録媒体読み取り部１４を介して読み取られる計算処理プログラム、あるいは通信ネットワーク（インターネット）Ｎ上のＷｅｂサーバ（この場合はプログラムサーバ（図示せず））から電送制御部１５を介してダウンロードされる計算処理プログラムを起動させ、メモリ１２内のＲＡＭ１２Ｂをワーク（作業用）メモリとして回路各部の動作を制御し計算処理を行なうものである。
【００２７】
この制御部（ＣＰＵ）１１には、前記メモリ１２、記録媒体読み取り部１４、電送制御部１５が接続される他、共有メモリ１６、ＵＳＢ端子などの外部機器接続部１７を介して前記ＰＣ端末２０Ａが直接接続される。
【００２８】
この電子計算装置１０では、直接接続ＰＣ端末２０Ａからの通信処理により所望の計算式を伴い入力される計算依頼に応じた計算処理を実行し、その計算結果を当該計算依頼元のＰＣ端末２０Ａに応答送信したり、ネット接続ＰＣ端末２０Ｂからの通信処理により計算処理サーバ２１を利用した所望の計算式を伴い入力される計算依頼に応じた計算処理を実行し、その計算結果を当該計算依頼元のＰＣ端末２０Ｂに応答送信したりする。
【００２９】
メモリ１２におけるＲＯＭ１２Ａには、本電子計算装置１０での種々の計算処理を司る前記計算処理プログラム１２a1の他に、公式メモリ１２a2が備えられる。
【００３０】
この公式メモリ１２a2には、複利計算式、積み立て計算式など、様々な分野の計算処理において使用される多数の公式が予め記憶されると共に、通常の対数関数計算処理を行うための［log(x)］関数の計算ルーチンと、関数の変数の部分にそのままｘを与えて高精度な対数関数計算処理を行うための［log1p(x)(=log(1+x)］関数の計算ルーチンが記憶される。この高精度な対数関数の計算ルーチンでは、以下のテイラー展開式でｘを直接代入した計算を実行することで、ｘの値が小さくても桁落ちしない計算が行える。
【００３１】
log(1+x)=x-(1/2)x^2+(1/3)x^3-(1/4)x^4+…      (|x|<1)
さらにまた、公式メモリ１２a2には、通常の指数関数計算処理を行うための［exp(x)]関数の計算ルーチンと、高精度な指数関数計算処理を行うための［exp(x)-1］関数の計算ルーチンが記憶される。この高精度な指数関数の計算ルーチンは、以下のテイラー展開式で計算を実行することで、桁落ちしない計算が行える。
【００３２】
exp(x)-1=(1/1!)x+(1/2!)x^2+(1/3!)x^3+(1/4!)x^4+…
メモリ１２におけるＲＡＭ１２Ｂには、計算式メモリ１２b1、計算精度メモリ１２b2、変数メモリ１２b3、計算式の状況検知レジスタ１２b4、計算結果数値メモリ１２b5が備えられる。
【００３３】
計算式メモリ１２b1には、直接続ＰＣ端末２０Ａやネット接続ＰＣ端末２０Ｂからの計算依頼に伴い入力された計算式が格納記憶される。
【００３４】
計算精度メモリ１２b2には、直接続ＰＣ端末２０Ａやネット接続ＰＣ端末２０Ｂからの計算依頼に伴う計算式と共に入力され指定された計算精度（有効桁数）が格納記憶される。
【００３５】
変数メモリ１２b3には、前記計算式メモリ１２b1に格納された計算式に含まれる変数を示す記号が格納記憶される。
【００３６】
計算式の状況検知レジスタ１２b4は、複数のレジスタＲ１，Ｒ２，Ｒ３，Ｒ４を有し、計算式メモリ１２b1に格納される計算式中から「１±数値」の部分または「exp(数値)−１」の部分が検知された場合に、その検知の都度、各レジスタＲｎに対し、当該「数値」の仮数部、指数部、符号が格納されると共に、「１±数値」の部分が検知された場合にフラグ“１”がセットされる。
【００３７】
計算結果数値メモリ１２b5には、前記計算依頼に応じて計算処理された最終の計算結果の数値が記憶される。
【００３８】
すなわち、この電子計算装置１０では、所望の計算式を伴う計算依頼に応じた計算処理の過程において、対数関数の［log1p(x)］関数や指数関数の［exp(x)-1］関数によるテイラー展開を使用した高精度な計算処理が必要と仮定される「１±数値」部分や「exp(数値)−１」部分を検知してその内容を状況検知レジスタ１２b4で保持し、当該レジスタ１２b4で保持された数値が１未満であると判断された場合には前記［log1p(x)］関数（高精度対数関数計算ルーチン）や［exp(x)-1］関数（高精度指数関数計算ルーチン）による高精度な計算処理を行い、１以上であると判断された場合には［log(x)］関数（通常対数関数計算ルーチン）や［exp(x)]関数（通常指数関数計算ルーチン）による通常の対数関数計算処理や通常の指数関数計算処理を行うことで、あらゆる計算において対数関数や指数関数の計算処理が適切に行われるようにする。
【００３９】
次に、前記構成の電子計算装置１０による計算機能について説明する。
【００４０】
図２は、前記電子計算装置１０による計算機能の全体処理を示すフローチャートである。
【００４１】
図３は、前記電子計算装置１０における計算機能の全体処理に伴う計算式の計算処理を示すフローチャートである。
【００４２】
図４は、前記電子計算装置１０において対数関数を含む計算式［loge(1+1.23456789E-17)］の計算依頼が入力された場合の計算処理に伴うＲＡＭ１２Ｂ上での数値処理状態を示す図である。
【００４３】
図５は、前記電子計算装置１０において対数関数を含み変数値を設定した計算式［loge(A):A=1+1.23456789E-17)］の計算依頼が入力された場合の計算処理に伴うＲＡＭ１２Ｂ上での数値処理状態を示す図である。
【００４４】
電子計算装置１０では、まず計算依頼の種類が「公式計算処理」であるか、「受信した計算式の計算処理」であるかが判断されるもので（ステップＳ１）、「公式計算処理」の場合は、直接接続ＰＣ端末２０Ａにおいて、ユーザ指定された公式の計算式が通信計算プログラムにて定義された公式メモリから読み出されるか、またはネット接続ＰＣ端末２０Ｂにおいて、計算処理サーバ２１へアクセスしてユーザ指定された公式の計算式が取得されることで任意の公式計算式が入力され、これと共に所望の計算精度の桁数が入力される（ステップＳ２）。
【００４５】
一方、「受信した計算式の計算処理」の場合は、直接接続ＰＣ端末２０Ａ、またはネット接続ＰＣ端末２０Ｂにおいて、任意の計算式が入力されると共に、計算精度の桁数が入力される（ステップＳ３）。
【００４６】
そして、前記直接接続ＰＣ端末２０Ａからの計算依頼が受信された場合には、共有メモリ１６に書き込まれた計算式および計算精度のデータが読み出され、また、前記ネット接続ＰＣ端末２０Ｂからの計算依頼の場合には、電送制御部１５を介してその計算式および計算精度のデータが受信される（ステップＳ４）。
【００４７】
すると、例えば図４（Ａ）または図５（Ａ）に示すように、前記ＰＣ端末２０Ａ（２０Ｂ）から受信された計算式［loge(1+1.23456789E-17)］または変数値を設定した計算式［loge(A):A=1+1.23456789E-17)］および計算精度［１６桁］の各データは、図４（Ｂ）または図５（Ｂ）に示すように、ＲＡＭ１２Ｂ内の計算式メモリ１２b1および計算精度メモリ１２b2に対してそれぞれ格納される（ステップＳ５）。
【００４８】
ここで、前記ＲＡＭ１２Ｂ内の計算式メモリ１２b1に格納された計算式について、ＲＯＭ１２Ａ内の公式メモリ１２にて予め記憶されている何れかの公式の左辺の部分が含まれるか否か判断される（ステップＳ６）。
【００４９】
例えば計算依頼により受信された計算式について、公式の左辺部分［10^x］や［x^y］が含まれると判断された場合には、当該計算式中の公式の左辺部分［10^x］や［x^y］がそのそれぞれの右辺［exp(x*loge(10))］や［exp(y*loge(x))］に変換され、前記計算式メモリ１２b1に書き換えられる（ステップＳ６→Ｓ７）。
【００５０】
そして、前記計算式メモリ１２b1に格納された計算式について、図３に示す計算処理が実行される（ステップＳＡ）。
【００５１】
一方、前記図４（Ｂ）または図５（Ｂ）で示したように、計算依頼により受信格納された計算式が［loge(1+1.23456789E-17)］または［loge(A):A=1+1.23456789E-17)］である場合には、公式の左辺部は含まれないと判断され、当該計算式について、図３に示す計算処理が実行される（ステップＳＡ）。
【００５２】
図３における計算式の計算処理が起動されると、例えば図４（Ｂ）または図５（Ｂ）で示したように、ＲＡＭ１２Ｂ内の計算式メモリ１２b1に格納された計算式［loge(1+1.23456789E-17)］または［loge(A):A=1+1.23456789E-17)］が読み出される。このときに、図５（Ｂ）で示したように、読み出された計算式中の変数［A］について数値代入の設定［A=1+1.23456789E-17］がある場合には、図５（Ｃ）に示すように、当該設定数値を代入した計算式［loge(1+1.23456789E-17)］に書き換えられる（ステップＡ１）。
【００５３】
すると、前記読み出された計算式［loge(1+1.23456789E-17)］について、その先頭から順に「１＋数値」形式または「１−数値」形式の計算式部分の存在が検知される。この場合に、「数値」とは整数・小数などの各種の数値を指す（ステップＡ２）。
【００５４】
そして、前記読み出された計算式［loge(1+1.23456789E-17)］について、「１＋数値」形式の計算式部分[1+1.23456789E-17]が検知された場合には、図４（Ｃ）または図５（Ｄ）に示すように、当該計算式［loge(1+1.23456789E-17)］中の「１＋数値」形式の計算式部分[1+1.23456789E-17]が状況検知レジスタ１２b4の先頭空きレジスタＲ１の指定に書き換えられて［loge(R1)］とされると共に、このレジスタＲ１に対して数値部分[+1.23456789E-17]の符号[+]・指数部[-17]・仮数部[1.23456789]が保存され、「１＋数値」ありを示すフラグ“１”がセットされる（ステップＡ３→Ａ４）。
【００５５】
この後さらに、前記計算式メモリ１２b1から読み出された計算式について続きの計算式がある場合には、続く計算式のところからさらに「１＋数値」形式または「１−数値」形式の計算式部分の存在が検知され、その存在が検知された場合には、前記同様のレジスタ処理が繰り返される（ステップＡ５→Ａ６→Ａ３→Ａ４）。
【００５６】
そして、前記計算式メモリ１２b1から読み出された計算式について、その最後まで前記同様の「１±数値」形式の計算式部分の存在検知処理およびレジスタ処理が繰り返されると、例えば図４（Ｃ）または図５（Ｄ）に示すように、計算式メモリ１２b1に書き換えられて格納されている計算式［loge(R1)］について、前記フラグ“１”がセットされたところの最初の「１±数値」形式の検知部分（この場合は(R1)部分）から順に、対数関数の引数になっているか検知される（ステップＡ５→Ａ７）。
【００５７】
ここで、前記計算式［loge(R1)］中の「１±数値」形式の検知部分［(R1)］について、対数関数［loge］の引数になっていると検知された場合には、その指定のレジスタＲ１に符号[+]・指数部[-17]・仮数部[1.23456789]に書き換えられて格納されている数値の絶対値が１未満であるか否か判断される（ステップＡ８→Ａ９）。
【００５８】
そして、対数関数［loge］の引数になっていると検知された「１±数値」形式の検知部分［(R1)］の数値の絶対値[1.23456789E-17]について、１未満であると判断された場合には、当該対数関数の計算がＲＯＭ１２Ａに記憶された高精度対数関数計算ルーチンに基づき［log1p(x)］関数を用いたテイラー展開式によって計算精度メモリ１２b2に格納された有効桁数に従い高精度に計算実行される（ステップＡ９→Ａ１０）。
【００５９】
一方、対数関数［loge］の引数になっていると検知された「１±数値」形式の検知部分の数値の絶対値について、１未満ではなく１以上であると判断された場合には、当該対数関数の計算がＲＯＭ１２Ａに記憶された通常対数関数計算ルーチンに基づき通常の［log(x)］関数を用いて計算精度メモリ１２b2に格納された有効桁数に従い実行される（ステップＡ９→Ａ１１）。
【００６０】
この後さらに、前記計算式メモリ１２b1に書き替えられて格納されている計算式について続きの計算式がある場合には、続く計算式のところからさらにレジスタＲｎに格納されている「１±数値」形式の検知部分が対数関数の引数になっているか検知され、対数関数の引数であると検知された場合には、前記同様の数値絶対値の１未満／１以上判断に従った対数関数の計算実行が繰り返される（ステップＡ１２→Ａ１３→Ａ８〜Ａ１１）。
【００６１】
そして、前記計算式メモリ１２b1に書き替えられて格納されている計算式について、その最後まで前記同様の「１±数値」形式の検知部分に対する対数関数の引数検知処理および数値絶対値の判断に従った対数関数計算処理が繰り返されると、さらにその計算式について、先頭から順に「exp（数値）−１」形式または「exp（数値）＋１」形式の計算式部分の存在が検知される（ステップＡ１２→Ａ１４）。
【００６２】
図６は、前記電子計算装置１０において指数関数を含み変数値を設定した計算式［exp(A)-1:A=1.23456789E-17)］の計算依頼が入力された場合の計算処理に伴うＲＡＭ１２Ｂ上での数値処理状態を示す図である。
【００６３】
例えば図６（Ａ）に示すような、計算依頼に伴い受信された計算式［exp(A)-1:A=1.23456789E-17)］および計算精度［１６桁］が、図６（Ｂ）に示すように、ＲＡＭ１２Ｂ内の計算式メモリ１２b1および計算精度メモリ１２b2にそれぞれ格納された後（ステップＳ１〜Ｓ５）、図６（Ｃ）に示すように、変数［A］に対して設定数値を代入した計算式［exp(1.23456789E-17)-1］に書き換えられた状態で（ステップＡ１）、前記ステップＡ２〜Ａ１２を通過し、当該計算式［exp(1.23456789E-17)-1］について、「exp（数値）−１」形式の計算式部分が検知された場合には（ステップＡ１４，Ａ１５）、図６（Ｄ）に示すように、その数値部分[1.23456789E-17]が状況検知レジスタ１２b4の先頭空きレジスタＲ１に対して符号[+]・指数部[-17]・仮数部[1.23456789]として保存されると共に、その数値の絶対値が１未満であるか否か判断される（ステップＡ１６）。
【００６４】
そして、指数関数［exp（数値）−１］であることが検知された数値の絶対値[1.23456789E-17]について、１未満であると判断された場合には、当該指数関数の計算がＲＯＭ１２Ａに記憶された高精度指数関数計算ルーチンに基づき［exp(x)-1］関数を用いたテイラー展開式によって計算精度メモリ１２b2に格納された有効桁数に従い高精度に計算実行される（ステップＡ１６→Ａ１７）。
【００６５】
一方、指数関数［exp（数値）−１］であることが検知された数値の絶対値について、１未満ではなく１以上であると判断された場合には、当該指数関数の計算がＲＯＭ１２Ａに記憶された通常指数関数計算ルーチンに基づき通常の［exp(x)］関数を用いて計算精度メモリ１２b2に格納された有効桁数に従い実行される（ステップＡ１６→Ａ１８）。
【００６６】
この後さらに、前記計算式メモリ１２b1に書き替えられて格納されている計算式について続きの計算式がある場合には、続く計算式のところからさらに「exp(数値)−１」形式の計算式部分が検知され、前記同様の数値絶対値の１未満／１以上判断に従った指数関数の計算実行が繰り返される（ステップＡ１９→Ａ２０→Ａ１５〜Ａ１８）。
【００６７】
そして、前記計算式メモリ１２b1に書き替えられて格納されている計算式について、その最後まで前記同様の「exp(数値)−１」形式の検知処理および数値絶対値の判断に従った指数関数計算処理が繰り返されると、残る未計算部分の計算処理が実行され、例えば図４（Ｄ）または図５（Ｅ）または図６（Ｄ）にてそれぞれ示すように、最終的な計算結果の数値データ[1.23456789E-17]がＲＡＭ１２Ｂ内の計算結果数値メモリ１２b5に保存される（ステップＡ１９→Ａ２１）。
【００６８】
こうして、前記図３における一連の計算式の計算処理が実行されると（ステップＳＡ（Ａ１〜Ａ２１））、ＲＡＭ１２Ｂ内の計算結果数値メモリ１２b5に保存された計算結果の数値データが、今回の計算依頼元であるＰＣ端末に対して次のように通知される（ステップＳ８）。
【００６９】
すなわち、計算依頼元が直接接続ＰＣ端末２０Ａである場合には、計算結果数値メモリ１２b5から読み出された計算結果の数値データは共有メモリ１６に書き込まれることで、接続部１７を介して前記直接接続ＰＣ端末２０Ａへ計算処理の完了が通知される。
【００７０】
また、計算依頼元がネット接続ＰＣ端末２０Ｂである場合には、計算結果数値メモリ１２b5から読み出された計算結果の数値データは、電送制御部１５を介して前記ネット接続ＰＣ端末２０Ｂへ送信されて計算処理の完了が通知される。
【００７１】
図７は、前記電子計算装置１０において積立計算の公式を指定し変数値を設定した計算式［FV=PMT*((1+r)^n-1)/r:PMT=100,000,000:r=0.012345678901:n=10)］の計算依頼が入力された場合の計算処理に伴うＲＡＭ１２Ｂ上での数値処理状態（その１）を示す図である。
【００７２】
図８は、前記電子計算装置１０において積立計算の公式を指定し変数値を設定した計算式［FV=PMT*((1+r)^n-1)/r:PMT=100,000,000:r=0.012345678901:n=10)］の計算依頼が入力された場合の計算処理に伴うＲＡＭ１２Ｂ上での数値処理状態（その２）を示す図である。
【００７３】
例えば図８（Ａ）に示すような、計算依頼に伴い受信された計算式［FV=PMT*((1+r)^n-1)/r:PMT=100,000,000:r=0.012345678901:n=10)］および計算精度［１１桁］が、図８（Ｂ）に示すように、ＲＡＭ１２Ｂ内の計算式メモリ１２b1および計算精度メモリ１２b2にそれぞれ格納されると（ステップＳ１〜Ｓ５）、図８（Ｃ）に示すように、計算式中の公式対応部分［(1+r)^n］が公式メモリ１２a2に予め記憶されている該当の公式［x^y=exp(y*loge(x))］に従って［FV=PMT*(exp(n*loge(1+r))-1)/r］に変換され、同計算式メモリ１２b1にて書き換えられる（ステップＳ６→Ｓ７）。
【００７４】
すると、計算式メモリ１２b1から読み出される計算式
［FV=PMT*(exp(n*loge(1+r))-1)/r］
内の変数［PMT］［r］［n］に対して、それぞれその設定数値である
［PMT=100,000,000:r=0.012345678901:n=10］が代入され、図８（Ｄ）に示すように、
［FV=100,000,000*(exp(10*loge(1+0.012345678901))-1)/0.012345678901］
として書き換えられる（ステップＡ１）。
【００７５】
そして、前記数値代入されて書き換えられた計算式
［FV=100,000,000*(exp(10*loge(1+0.012345678901))-1)/0.012345678901］について、「１＋数値」形式の計算式部分[1+0.012345678901]が検知された場合には、図８（Ｅ）に示すように、当該計算式中の「１＋数値」形式の計算式部分[1+0.012345678901]が状況検知レジスタ１２b4の先頭空きレジスタＲ１の指定に書き換えられて
［FV=100,000,000*(exp(10*loge(R1))-1)/0.012345678901］とされると共に、このレジスタＲ１に対してその数値部分[+0.012345678901]の符号[+]・指数部[-2]・仮数部[1.2345678901]が保存され、「１＋数値」ありを示すフラグ“１”がセットされる（ステップＡ２〜Ａ４）。
【００７６】
ここで、前記計算式［FV=100,000,000*(exp(10*loge(R1))-1)/0.012345678901］中の「１＋数値」形式の前記フラグ“１”で示される検知部分［(R1)］について、対数関数［loge］の引数になっていると検知された後、その指定のレジスタＲ１に符号[+]・指数部[-2]・仮数部[1.2345678901]に書き換えられて格納されている数値の絶対値が１未満であると判断されるので、当該対数関数の計算がＲＯＭ１２Ａに記憶された高精度対数関数計算ルーチンに基づき［log1p(x)］関数を用いたテイラー展開式によって計算精度メモリ１２b2に格納された有効桁数に従い高精度に計算実行される（ステップＡ７〜Ａ１０）。
【００７７】
具体的には、［loge(1+0.012345678901)=1.2270092482E-02］として計算され、図８（Ｆ）に示すように、計算式メモリ１２b1内の計算式は、
［FV=100,000,000*(exp(10*(1.2270092482E-02)-1)/0.012345678901］となる。
【００７８】
すると、当該計算式について、「exp（数値）−１」形式の計算式部分［exp(10*(1.2270092482E-02)-1］が検知され、図８（Ｇ）に示すように、その数値部分[10*(1.2270092482E-02)=1.2270092482E-01]が状況検知レジスタ１２b4の先頭空きレジスタＲ２に対して符号[+]・指数部[-1]・仮数部[1.2270092482]として保存される（ステップＡ１４，Ａ１５）。
【００７９】
そして、前記指数関数［exp（数値）−１］であることが検知された数値の絶対値[1.2270092482E-01]について、１未満であると判断されるので、当該指数関数の計算がＲＯＭ１２Ａに記憶された高精度指数関数計算ルーチンに基づき［exp(x)-1］関数を用いたテイラー展開式によって計算精度メモリ１２b2に格納された有効桁数に従い高精度に計算実行される（ステップＡ１６→Ａ１７）。
【００８０】
具体的には、［exp(1.2270092482E-01)=0.13054625206］として計算され、図８（Ｇ）に示すように、計算式メモリ１２b1内の計算式は、
［FV=100,000,000*(0.13054625206)/0.012345678901］となる。
【００８１】
そして、残る未計算部分の計算処理が実行され、図８（Ｈ）に示すように、最終的な計算結果の数値データ[1,057,424,651.2]がＲＡＭ１２Ｂ内の計算結果数値メモリ１２b5に保存される（ステップＡ２１）。
【００８２】
すると、前記ＲＡＭ１２Ｂ内の計算結果数値メモリ１２b5に保存された計算結果の数値データ[1,057,424,651.2]が、今回の計算依頼元であるＰＣ端末２０Ａ（２０Ｂ）に対して通知される（ステップＳ８）。
【００８３】
したがって、前記構成の電子計算装置１０による計算機能によれば、所望の計算式を伴う計算依頼に応じた計算処理の過程において、対数関数の［log1p(x)］関数や指数関数の［exp(x)-1］関数によるテイラー展開を使用した高精度な計算処理が必要と仮定される「１±数値」部分や「exp(数値)−１」部分を検知してその内容を状況検知レジスタ１２b4で保持し、当該レジスタ１２b4で保持された数値が１未満であると判断された場合には前記［log1p(x)］関数（高精度対数関数計算ルーチン）や［exp(x)-1］関数（高精度指数関数計算ルーチン）による高精度な計算処理を行い、１以上であると判断された場合には［log(x)］関数（通常対数関数計算ルーチン）や［exp(x)]関数（通常指数関数計算ルーチン）による通常の対数関数計算処理や通常の指数関数計算処理を行うことで、あらゆる計算において対数関数や指数関数の計算処理が適切に行われるようにしたので、予めプログラマーが数値計算毎に意識して［log1p(x)］関数と［log(x)］関数や［exp(x)-1]関数と［exp(x)]関数を使い分けておく必要なく、容易に桁落ちのない高精度な計算結果を得ることができる。
【００８４】
なお、前記実施形態では、対数関数の計算について、全般に渡り自然対数［loge(x)］の場合を対象にして説明したが、常用対数［log10(x)］の場合であっても、自然対数［loge(x)］の計算数値と常用対数［log10(x)］の計算数値とは、
log10(x)=(loge(x))/2.30258509
と一定の比率で異なるだけなので、対数関数の計算結果に当該定率の差を加味するだけで何れの底の対数関数についても前記同様の計算処理により容易に桁落ちのない高精度な計算結果を得ることができる。
【００８５】
なお、前記実施形態において記載した手法、すなわち、図２のフローチャートに示す計算機能の全体処理、図３のフローチャートに示す前記計算機能の全体処理に伴う計算式の計算処理等の各手法は、コンピュータに実行させることができるプログラムとして、メモリカード（ＲＯＭカード、ＲＡＭカード等）、磁気ディスク（フロッピー（登録商標）ディスク、ハードディスク等）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤ等）、半導体メモリ等の外部記録媒体１３に格納して配布することができる。そして、コンピュータは、この外部記録媒体１３に記録されたプログラムを記録媒体読み取り部１４によって読み込み、この読み込んだプログラムによって動作が制御されることにより、前記実施形態において説明した対数関数や指数関数の計算を伴う計算式の計算機能を実現し、前述した手法による同様の処理を実行することができる。
【００８６】
また、前記各手法を実現するためのプログラムのデータは、プログラムコードの形態として通信ネットワーク（インターネット）Ｎ上を伝送させることができ、この通信ネットワーク（インターネット）Ｎに接続されたコンピュータ端末（プログラムサーバ）から前記のプログラムデータを取り込み、前述した対数関数や指数関数の計算を伴う計算式の計算機能を実現することもできる。
【００８７】
なお、本願発明は、前記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。さらに、前記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されたり、幾つかの構成要件が組み合わされても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除されたり組み合わされた構成が発明として抽出され得るものである。
【図面の簡単な説明】
【００８８】
【図１】本発明の実施形態に係わる電子計算装置１０の電子回路の構成を示すブロック図。
【図２】前記電子計算装置１０による計算機能の全体処理を示すフローチャート。
【図３】前記電子計算装置１０における計算機能の全体処理に伴う計算式の計算処理を示すフローチャート。
【図４】前記電子計算装置１０において対数関数を含む計算式［loge(1+1.23456789E-17)］の計算依頼が入力された場合の計算処理に伴うＲＡＭ１２Ｂ上での数値処理状態を示す図。
【図５】前記電子計算装置１０において対数関数を含み変数値を設定した計算式［loge(A):A=1+1.23456789E-17)］の計算依頼が入力された場合の計算処理に伴うＲＡＭ１２Ｂ上での数値処理状態を示す図。
【図６】前記電子計算装置１０において指数関数を含み変数値を設定した計算式［exp(A)-1:A=1.23456789E-17)］の計算依頼が入力された場合の計算処理に伴うＲＡＭ１２Ｂ上での数値処理状態を示す図。
【図７】前記電子計算装置１０において積立計算の公式を指定し変数値を設定した計算式［FV=PMT*((1+r)^n-1)/r:PMT=100,000,000:r=0.012345678901:n=10)］の計算依頼が入力された場合の計算処理に伴うＲＡＭ１２Ｂ上での数値処理状態（その１）を示す図。
【図８】前記電子計算装置１０において積立計算の公式を指定し変数値を設定した計算式［FV=PMT*((1+r)^n-1)/r:PMT=100,000,000:r=0.012345678901:n=10)］の計算依頼が入力された場合の計算処理に伴うＲＡＭ１２Ｂ上での数値処理状態（その２）を示す図。
【符号の説明】
【００８９】
１０  …電子計算装置
１１  …ＣＰＵ（制御部）
１２  …メモリ
１２Ａ…ＲＯＭ
１２a1…計算処理プログラム
１２a2…公式メモリ
１２Ｂ…ＲＡＭ
１２b1…計算式メモリ
１２b2…計算精度メモリ
１２b3…変数メモリ
１２b4…計算式の状況検知レジスタ
１２b5…計算結果数値メモリ
１３  …外部記録媒体
１４  …記録媒体読取部
１５  …電送制御部
１６  …共有メモリ
１７  …外部機器接続部
２０Ａ…直接接続ＰＣ端末
２０Ｂ…ネット接続ＰＣ端末
２１  …計算処理サーバ
Ｎ  …通信ネットワーク（インターネット）
【図１】
2006163529.tif 000003
【図２】
2006163529.tif 000004
【図３】
2006163529.tif 000005
【図４】
2006163529.tif 000006
【図５】
2006163529.tif 000007
【図６】
2006163529.tif 000008
【図７】
2006163529.tif 000009
【図８】
2006163529.tif 000010