(57)【要約】【課題】従来と比較して計算精度を高める。【解決手段】グラフ関数電卓１Ａにおいて、十進演算器７０は、入力部３０を介して入力された計算式の計算を、計算桁数ｎ，ｎ＋ｍでそれぞれ行う。そして、ＣＰＵ２０は、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果のうち最上位桁からｎ＋１桁までの上位成分値が０になった場合に、計算桁数ｎでの加減算結果を０とする補正を行う。【選択図】図８
2007272629.tif 000002
【特許請求の範囲】
【請求項１】
ユーザから計算式の入力操作を受ける計算式入力手段と、
計算桁数ｎの値を設定する桁数設定手段と、
前記計算式の計算を、計算桁数ｎまたはｎ＋ｍ（但し、ｍは正の整数）で行う計算手段と、
前記計算式中での加減算を検知する加減算検知手段と、
前記加減算検知手段により検知された加減算について、前記計算手段による計算桁数ｎ＋ｍでの加減算結果のうち、最上位桁からｎ＋ｐ桁（但し、ｐはｐ≦ｍを満たす正の整数）までの上位成分値が０になった場合に前記計算手段による計算桁数ｎでの加減算結果を０とする補正を行い、前記上位成分値が０にならなかった場合に前記計算手段による計算桁数ｎでの加減算結果に対して当該補正を行わないゼロ補正手段と、
当該ゼロ補正手段による補正を行って前記計算式全体についての計算桁数ｎでの計算を行い、結果を出力する結果出力手段と、
を備えることを特徴とする計算装置。
【請求項２】
請求項１記載の計算装置において、
計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち値が一致しない最上位の不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち前記不一致桁よりも１つ下位の桁の数値で丸める補正を行う丸め補正手段を備えることを特徴とする計算装置。
【請求項３】
請求項１または２記載の計算装置において、
前記計算式中の計算部分を先頭から順に指定する計算部分指定手段を備え、
前記計算手段は、前記計算部分指定手段により指定された計算部分を計算桁数ｎまたはｎ＋ｍで順に計算し、
前記ゼロ補正手段は、前記計算部分指定手段により指定された加減算の計算部分について、計算桁数ｎ＋ｍでの加減算結果の前記上位成分値が０になった場合に、計算桁数ｎでの加減算結果を０とする補正を行うことを特徴とする計算装置。
【請求項４】
請求項１〜３の何れか一項に記載の計算装置において、
ｍ＝４であることを特徴とする計算装置。
【請求項５】
請求項１〜４の何れか一項に記載の計算装置において、
ｐ＝１であることを特徴とする計算装置。
【請求項６】
ユーザから計算式の入力操作を受ける計算式入力手段と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定手段と、
前記計算式の計算を、計算桁数ｎ，ｎ＋ｍ（但し、ｍはｍ＜ｎを満たす正の整数）でそれぞれ行う計算手段と、
前記計算手段による計算桁数ｎ＋ｍでの計算結果の絶対値が前記計算手段による計算桁数ｎでの計算結果の絶対値に対して所定倍率以下である場合に計算桁数ｎでの計算結果を０とする補正を行い、前記所定倍率以下でない場合に計算桁数ｎでの計算結果に対して当該補正を行わないゼロ補正手段と、
前記計算式全体についての計算桁数ｎでの計算結果を出力する結果出力手段と、
を備えることを特徴とする計算装置。
【請求項７】
請求項６記載の計算装置において、
計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち値が一致しない最上位の不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち前記不一致桁よりも１つ下位の桁の数値で丸める補正を行う丸め補正手段を備えることを特徴とする計算装置。
【請求項８】
請求項６または７記載の計算装置において、
前記計算式中の計算部分を先頭から順に指定する計算部分指定手段を備え、
前記計算手段は、前記計算部分指定手段により指定された計算部分を計算桁数ｎ，ｎ＋ｍでそれぞれ順に計算し、
前記ゼロ補正手段は、前記計算部分指定手段により指定された計算部分について、前記計算手段による計算桁数ｎ＋ｍでの計算結果の絶対値が前記計算手段による計算桁数ｎでの計算結果の絶対値に対して所定倍率以下である場合に、計算桁数ｎでの計算結果を０とする補正を行うことを特徴とする計算装置。
【請求項９】
請求項６〜８の何れか一項に記載の計算装置において、
前記所定倍率は、１０-3倍であることを特徴とする計算装置。
【請求項１０】
ユーザから計算式の入力操作を受ける計算式入力手段と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定手段と、
前記計算式の計算を、計算桁数ｎ，ｎ＋ｍ（但し、ｍはｍ＜ｎを満たす正の整数）でそれぞれ行う計算手段と、
前記計算式中での加減算を検知する加減算検知手段と、
前記加減算検知手段により検知された加減算について、前記計算手段による計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、この加減算結果の最下位桁を±１補正する最下位桁補正手段と、
計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち値が一致しない最上位の不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち前記不一致桁よりも１つ下位の桁の数値で丸める補正を行う丸め補正手段と、
前記計算式全体についての計算桁数ｎでの計算結果を出力する結果出力手段と、
を備えることを特徴とする計算装置。
【請求項１１】
請求項１０記載の計算装置において、
前記計算式中の計算部分を先頭から順に指定する計算部分指定手段を備え、
前記計算手段は、前記計算部分指定手段により指定された計算部分を計算桁数ｎ，ｎ＋ｍでそれぞれ順に計算し、
前記最下位桁補正手段は、前記計算部分指定手段により指定された加減算の計算部分について、前記計算手段による計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、この加減算結果の最下位桁を±１補正し、
前記丸め補正手段は、前記計算式全体について、計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち値が一致しない不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち前記不一致桁よりも１つ下位の桁の数値で丸める補正を行うことを特徴とする計算装置。
【請求項１２】
コンピュータに、
ユーザから計算式の入力操作を受ける計算式入力機能と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定機能と、
前記計算式の計算を、計算桁数ｎまたはｎ＋ｍ（但し、ｍは正の整数）で行う計算機能と、
前記計算式中での加減算を検知する加減算検知機能と、
前記加減算検知機能により検知された加減算について、前記計算機能による計算桁数ｎ＋ｍでの加減算結果のうち、最上位桁からｎ＋ｐ桁（但し、ｐはｐ≦ｍを満たす正の整数）までの上位成分値が０になった場合に前記計算機能による計算桁数ｎでの加減算結果を０とする補正を行い、前記上位成分値が０にならなかった場合に前記計算機能による計算桁数ｎでの加減算結果に対して当該補正を行わないゼロ補正機能と、
前記計算式全体についての計算桁数ｎでの計算結果を出力する結果出力機能と、
を実現させることを特徴とする計算プログラム。
【請求項１３】
コンピュータに、
ユーザから計算式の入力操作を受ける計算式入力機能と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定機能と、
前記計算式の計算を、計算桁数ｎ，ｎ＋ｍ（但し、ｍはｍ＜ｎを満たす正の整数）でそれぞれ行う計算機能と、
前記計算機能による計算桁数ｎ＋ｍでの計算結果の絶対値が前記計算機能による計算桁数ｎでの計算結果の絶対値に対して所定倍率以下である場合に計算桁数ｎでの計算結果を０とする補正を行い、前記所定倍率以下でない場合に計算桁数ｎでの計算結果に対して当該補正を行わないゼロ補正機能と、
前記計算式全体についての計算桁数ｎでの計算結果を出力する結果出力機能と、
を実現させることを特徴とする計算プログラム。
【請求項１４】
コンピュータに、
ユーザから計算式の入力操作を受ける計算式入力機能と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定機能と、
前記計算式の計算を、計算桁数ｎ，ｎ＋ｍ（但し、ｍはｍ＜ｎを満たす正の整数）でそれぞれ行う計算機能と、
前記計算式中での加減算を検知する加減算検知機能と、
前記加減算検知機能により検知された加減算について、前記計算機能による計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、この加減算結果の最下位桁を±１補正する最下位桁補正機能と、
計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち値が一致しない不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち前記不一致桁よりも１つ下位の桁の数値で丸める補正を行う丸め補正機能と、
前記計算式全体についての計算桁数ｎでの計算結果を出力する結果出力機能と、
を実現させることを特徴とする計算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算装置及び計算プログラムに関する。
【背景技術】
【０００２】
従来より、浮動小数点演算を行うことのできる計算装置がある。
この計算装置においては、演算規格としてＡＮＳＩ／ＩＥＥＥ７５４−１９５８標準（「ＩＥＥＥ７５４」）等が用いられており、計算に用いる桁数を多くすることにより、高い精度での浮動小数点演算が可能となっている（例えば、特許文献１参照）。
【特許文献１】特開２０００−３２２２３８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、このような計算装置においては、例えば図１６（ａ），（ｂ）に示すように、「３×√７−６３」や「１−１÷３×３」等、値が等しいはずの数値間で減算を行うと、計算桁数を多くして精度を高めても、結果が０とならない場合がある。
【０００４】
また、値の近い数値間で減算等を行うと、計算桁数の制約により有効桁数が極端に少なくなるという問題、いわゆる「桁落ち」が発生する場合があり、この場合には、減算自体の結果にはほとんど誤差がなくても、その結果を用いて更に演算を行うと、誤差が大きくなってしまう場合がある。具体的には、例えば図１７（ａ）に示すように、「（１＋cosｘ）／ｘ」の計算をｘ＝３．１４１５９３として計算桁数「１５」，「１９」でそれぞれ行うと、「１＋cosｘ」の計算によって桁落ちが発生するものの、これらの計算結果は偶然に等しい値となる。しかし、この計算結果を用いて「（１＋cosｘの計算結果）／ｘ」を計算すると、図１７（ｂ）に示すように、計算桁数「１５」での計算結果は「１．９０９８５９１０６５１０６１Ｅ−１４」、計算桁数「１９」での計算結果は「１．９０９８５９１０６５１０６１４２０１Ｅ−１４」となってしまい、誤差が大きくなる。更に、図１７（ｃ）に示すように、計算桁数「１９」での計算結果を用いて計算桁数「１５」での計算結果を丸め、計算桁数「２３」での計算結果を用いて計算桁数「１９」での計算結果を丸める補正を行うと、計算桁数「１５」，「１９」での計算結果は「１．９０９８５９１０６５１０６１Ｅ−１４」，「１．９０９８６０Ｅ−１４」となってしまい、誤差が更に大きくなる。
【０００５】
本発明は上記のような課題に鑑みて為されたものであり、従来と比較して計算精度を高めることができる計算装置及び計算プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
以上の課題を解決するために、請求項１記載の発明は、計算装置（例えば、図１のグラフ関数電卓１Ａ）であって、
ユーザから計算式の入力操作を受ける計算式入力手段（例えば、図２の入力部３０；図８のステップＳ１）と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定手段（例えば、図２の入力部３０；図８のステップＳ１）と、
前記計算式の計算を、計算桁数ｎまたはｎ＋ｍ（但し、ｍは正の整数）で行う計算手段（例えば、図２の十進演算器７０；図８のステップＳ３，Ｓ４）と、
前記計算式中での加減算を検知する加減算検知手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５００；図８のステップＳ５）と、
前記加減算検知手段により検知された加減算について、前記計算手段による計算桁数ｎ＋ｍでの加減算結果のうち、最上位桁からｎ＋ｐ桁（但し、ｐはｐ≦ｍを満たす正の整数）までの上位成分値が０になった場合に前記計算手段による計算桁数ｎでの加減算結果を０とする補正を行い、前記上位成分値が０にならなかった場合に前記計算手段による計算桁数ｎでの加減算結果に対して当該補正を行わないゼロ補正手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５００；図８のステップＳ６〜ステップＳ７）と、
当該ゼロ補正手段による補正を行って前記計算式全体についての計算桁数ｎでの計算を行い、結果を出力する結果出力手段（例えば、図２の表示部４０；図８のステップＳ１３）と、
を備えることを特徴とする。
【０００７】
ここで、桁設定手段は、ユーザからの入力操作によって計算桁数ｎを設定することが好ましい。
【０００８】
請求項２記載の発明は、請求項１記載の計算装置において、
計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち値が一致しない最上位の不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち前記不一致桁よりも１つ下位の桁の数値で丸める丸める補正を行う補正手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５００；図８のステップＳ１２）を備えることを特徴とする。
【０００９】
請求項３記載の発明は、請求項１または２記載の計算装置において、
前記計算式中の計算部分を先頭から順に指定する計算部分指定手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５００；図８のステップＳ２）を備え、
前記計算手段は、前記計算部分指定手段により指定された計算部分を計算桁数ｎまたはｎ＋ｍで順に計算し、
前記ゼロ補正手段は、前記計算部分指定手段により指定された加減算の計算部分について、計算桁数ｎ＋ｍでの加減算結果の前記上位成分値が０になった場合に、計算桁数ｎでの加減算結果を０とする補正を行うことを特徴とする。
【００１０】
ここで、計算式中の先頭の計算部分とは、計算式を計算するための計算順序における先頭の計算部分、つまり計算式中で始めに計算されるべき計算部分を意味する。従って、例えば計算式が「１−１÷３」である場合には、先頭の計算部分は「１÷３」の部分である。
【００１１】
請求項４記載の発明は、請求項１〜３の何れか一項に記載の計算装置において、
ｍ＝４であることを特徴とする。
【００１２】
請求項５記載の発明は、請求項１〜４の何れか一項に記載の計算装置において、
ｐ＝１であることを特徴とする。
【００１３】
請求項６記載の発明は、計算装置（例えば、図１のグラフ関数電卓１Ｂ）であって、
ユーザから計算式の入力操作を受ける計算式入力手段（例えば、図２の入力部３０；図１３のステップＴ１）と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定手段（例えば、図２の入力部３０；図１３のステップＴ１）と、
前記計算式の計算を、計算桁数ｎ，ｎ＋ｍ（但し、ｍはｍ＜ｎを満たす正の整数）でそれぞれ行う計算手段（例えば、図２の十進演算器７０；図１３のステップＴ３，Ｔ４）と、
前記計算手段による計算桁数ｎ＋ｍでの計算結果の絶対値が前記計算手段による計算桁数ｎでの計算結果の絶対値に対して所定倍率以下である場合に計算桁数ｎでの計算結果を０とする補正を行い、前記所定倍率以下でない場合に計算桁数ｎでの計算結果に対して当該補正を行わないゼロ補正手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５０１；図１３のステップＴ５〜ステップＴ６）と、
前記計算式全体についての計算桁数ｎでの計算結果を出力する結果出力手段（例えば、図２の表示部４０；図１３のステップＴ１３）と、
を備えることを特徴とする。
【００１４】
請求項７記載の発明は、請求項６記載の計算装置において、
計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち値が一致しない最上位の不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち前記不一致桁よりも１つ下位の桁の数値で丸める補正を行う丸め補正手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５０１；図１３のステップＴ１２）を備えることを特徴とする。
【００１５】
請求項８記載の発明は、請求項６または７記載の計算装置において、
前記計算式中の計算部分を先頭から順に指定する計算部分指定手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５０１；図１３のステップＴ２）を備え、
前記計算手段は、前記計算部分指定手段により指定された計算部分を計算桁数ｎ，ｎ＋ｍでそれぞれ順に計算し、
前記ゼロ補正手段は、前記計算部分指定手段により指定された計算部分について、前記計算手段による計算桁数ｎ＋ｍでの計算結果の絶対値が前記計算手段による計算桁数ｎでの計算結果の絶対値に対して所定倍率以下である場合に、計算桁数ｎでの計算結果を０とする補正を行うことを特徴とする。
【００１６】
請求項９記載の発明は、請求項６〜８の何れか一項に記載の計算装置において、
前記所定倍率は、１０-3倍であることを特徴とする。
【００１７】
請求項１０記載の発明は、計算装置（例えば、図１のグラフ関数電卓１Ａ）であって、
ユーザから計算式の入力操作を受ける計算式入力手段（例えば、図２の入力部３０；図８のステップＳ１）と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定手段（例えば、図２の入力部３０；図８のステップＳ１）と、
前記計算式の計算を、計算桁数ｎ，ｎ＋ｍ（但し、ｍはｍ＜ｎを満たす正の整数）でそれぞれ行う計算手段（例えば、図２の十進演算器７０；図８のステップＳ３，Ｓ４）と、
前記計算式中での加減算を検知する加減算検知手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５００；図８のステップＳ５）と、
前記加減算検知手段により検知された加減算について、前記計算手段による計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、この加減算結果の最下位桁を±１補正する最下位桁補正手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５００；図８のステップＳ９）と、
計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち値が一致しない最上位の不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち前記不一致桁よりも１つ下位の桁の数値で丸める補正を行う丸め補正手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５００；図８のステップＳ１２）と、
前記計算式全体についての計算桁数ｎでの計算結果を出力する結果出力手段（例えば、図２の表示部４０；図８のステップＳ１３）と、
を備えることを特徴とする。
【００１８】
請求項１１記載の発明は、請求項１０記載の計算装置において、
前記計算式中の計算部分を先頭から順に指定する計算部分指定手段（例えば、図２のＣＰＵ２０及び図７の計算プログラム５００；図８のステップＳ２）を備え、
前記計算手段は、前記計算部分指定手段により指定された計算部分を計算桁数ｎ，ｎ＋ｍでそれぞれ順に計算し、
前記最下位桁補正手段は、前記計算部分指定手段により指定された加減算の計算部分について、前記計算手段による計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、この加減算結果の最下位桁を±１補正し、
前記丸め補正手段は、前記計算式全体について、計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち値が一致しない不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち前記不一致桁よりも１つ下位の桁の数値で丸める補正を行うことを特徴とする。
【００１９】
請求項１２記載の発明は、計算プログラムであって、
コンピュータに、
ユーザから計算式の入力操作を受ける計算式入力機能（例えば、図８のステップＳ１）と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定機能（例えば、図８のステップＳ１）と、
前記計算式の計算を、計算桁数ｎまたはｎ＋ｍ（但し、ｍは正の整数）で行う計算機能（例えば、図８のステップＳ３，Ｓ４）と、
前記計算式中での加減算を検知する加減算検知機能（例えば、図８のステップＳ５）と、
前記加減算検知機能により検知された加減算について、前記計算機能による計算桁数ｎ＋ｍでの加減算結果のうち、最上位桁からｎ＋ｐ桁（但し、ｐはｐ≦ｍを満たす正の整数）までの上位成分値が０になった場合に前記計算機能による計算桁数ｎでの加減算結果を０とする補正を行い、前記上位成分値が０にならなかった場合に前記計算機能による計算桁数ｎでの加減算結果に対して当該補正を行わないゼロ補正機能（例えば、図８のステップＳ６〜ステップＳ７）と、
前記計算式全体についての計算桁数ｎでの計算結果を出力する結果出力機能（例えば、図８のステップＳ１３）と、
を実現させることを特徴とする。
【００２０】
請求項１３記載の発明は、計算プログラムであって、
コンピュータに、
ユーザから計算式の入力操作を受ける計算式入力機能（例えば、図１３のステップＴ１）と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定機能（例えば、図１３のステップＴ１）と、
前記計算式の計算を、計算桁数ｎ，ｎ＋ｍ（但し、ｍはｍ＜ｎを満たす正の整数）でそれぞれ行う計算機能（例えば、図１３のステップＴ３，Ｔ４）と、
前記計算機能による計算桁数ｎ＋ｍでの計算結果の絶対値が前記計算機能による計算桁数ｎでの計算結果の絶対値に対して所定倍率以下である場合に計算桁数ｎでの計算結果を０とする補正を行い、前記所定倍率以下でない場合に計算桁数ｎでの計算結果に対して当該補正を行わないゼロ補正機能（例えば、図１３のステップＴ５〜ステップＴ６）と、
前記計算式全体についての計算桁数ｎでの計算結果を出力する結果出力機能（例えば、図１３のステップＴ１３）と、
を実現させることを特徴とする。
【００２１】
請求項１４記載の発明は、計算プログラムであって、
コンピュータに、
ユーザから計算式の入力操作を受ける計算式入力機能（例えば、図８のステップＳ１）と、
計算桁数ｎ（但し、ｎは正の整数）の値を設定する桁数設定機能（例えば、図８のステップＳ１）と、
前記計算式の計算を、計算桁数ｎ，ｎ＋ｍ（但し、ｍはｍ＜ｎを満たす正の整数）でそれぞれ行う計算機能（例えば、図８のステップＳ３，Ｓ４）と、
前記計算式中での加減算を検知する加減算検知機能（例えば、図８のステップＳ５）と、
前記加減算検知機能により検知された加減算について、前記計算機能による計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、この加減算結果の最下位桁を±１補正する最下位桁補正機能（例えば、図８のステップＳ９）と、
計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち値が一致しない不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち前記不一致桁よりも１つ下位の桁の数値で丸める丸める補正を行う補正機能（例えば、図８のステップＳ１２）と、
前記計算式全体についての計算桁数ｎでの計算結果を出力する結果出力機能（例えば、図８のステップＳ１３）と、
を実現させることを特徴とする。
【発明の効果】
【００２２】
請求項１，１２記載の発明によれば、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果のうち、最上位桁からｎ＋ｐ桁までの上位成分値が０になった場合に計算桁数ｎでの計算結果が０とされるので、微小な誤差が生じても、０とすべき誤差であると適切に判断されて、計算結果が０に補正される。従って、微小な誤差が生じた場合に０とすべきか否かを判別できなかった従来の場合と異なり、誤差の集積による計算精度の悪化を防止して、計算精度を高めることができる。
【００２３】
請求項２記載の発明によれば、丸め補正手段が計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち、値が一致しない最上位の不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち、前記不一致桁よりも１つ下位の桁の数値で丸める補正を行うので、計算精度を更に高めることができる。
【００２４】
請求項３記載の発明によれば、加減算の計算部分ごとにゼロ補正手段が計算結果の補正を行うので、計算精度を確実に高めることができる。
請求項４記載の発明によれば、請求項１〜３の何れか一項に記載の発明と同様の効果を得ることができる。
請求項５記載の発明によれば、請求項１〜４の何れか一項に記載の発明と同様の効果を得ることができる。
【００２５】
請求項６，１３記載の発明によれば、計算桁数ｎ＋ｍでの計算結果の絶対値が計算桁数ｎでの計算結果の絶対値に対して所定倍率以下である場合に、計算桁数ｎでの計算結果が０とされるので、例えば所定倍率として１以下の値を用いれば、計算桁数が多くなるほど０に近づくような誤差などの微小な誤差が生じても、０とすべき誤差であると適切に判断されて、計算結果が０に補正される。従って、微小な誤差が生じた場合に０とすべきか否かを判別できなかった従来の場合と異なり、誤差の集積による計算精度の悪化を防止して、計算精度を高めることができる。
【００２６】
請求項７記載の発明によれば、丸め補正手段が計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち、値が一致しない最上位の不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち、前記不一致桁よりも１つ下位の桁の数値で丸める補正を行うので、計算精度を更に高めることができる。
【００２７】
請求項８記載の発明によれば、計算部分ごとにゼロ補正手段が計算結果の補正を行うので、計算精度を確実に高めることができる。
請求項９記載の発明によれば、請求項６〜８の何れか一項に記載の発明と同様の効果を得ることができる。
【００２８】
請求項１０，１４記載の発明によれば、丸め補正手段が計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、計算桁数ｎでの計算結果のうち、値が一致しない最上位の不一致桁の数値を、計算桁数ｎ＋ｍでの計算結果のうち、前記不一致桁よりも１つ下位の桁の数値で丸める補正を行うので、計算精度を高めることができる。
【００２９】
また、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、最下位桁補正手段がこの加減算結果の最下位桁を±１補正するので、桁落ちが発生した場合には、偶然に計算桁数ｎでの計算結果と計算桁数ｎ＋ｍでの計算結果とが一致する場合であっても、計算桁数ｎでの計算結果と補正後の計算桁数ｎ＋ｍでの計算結果とが相違し、相違する値は最小限の値となる。
従って、当該±１補正後の計算結果が丸め補正の前に計算式中の次の計算部分に用いられる場合には、この計算に用いられる計算桁数ｎでの計算結果と補正後の計算桁数ｎ＋ｍでの計算結果とが相違するため、当該計算部分について、計算桁数ｎ＋ｍでの計算では、計算桁数ｎでの計算と比較して桁落ちによる誤差を小さくすることができる。よって、このような計算桁数ｎ＋ｍでの計算結果を丸め補正に用いることにより、従来と比較して計算精度を高めることができる。
一方、±１補正後の計算結果がそのまま丸め補正に用いられる場合には、相違する値が最小限の値であるため、±１補正が丸め補正の結果に影響を及ぼすのを防止することができる。
【００３０】
請求項１１記載の発明によれば、最下位桁補正手段による補正後の計算結果を計算手段が計算式中の次の計算部分に用いた後、丸め補正手段が丸め補正を行うので、従来と比較して計算精度を確実に高めることができる。
【発明を実施するための最良の形態】
【００３１】
以下、図１〜図１４を参照して、本発明に係る計算装置をグラフ関数電卓に適用した場合の２つの実施形態について詳細に説明する。
【００３２】
〔共通形態〕
まず、各実施形態に共通する全体の構成を説明する。
図１は、グラフ関数電卓１の概観図である。同図に示すように、グラフ関数電卓１は、各種操作キーを含むキー群３及びディスプレイ４を備えている。
【００３３】
キー群３は、ユーザによって操作される複数のキーを備えており、本実施の形態においては、数字キー群３ａと、方向キー３ｂと、ＥＸＥキー３ｃ等とを備えている。
【００３４】
数字キー群３ａはユーザから数字の入力操作を受けるためのキーである。また方向キー３ｂは、ユーザからカーソルの移動操作や、機能選択操作を受ける場合等に押下されるキーであり、本実施形態においては、上下左右の方向に指示入力可能に構成されている。ＥＸＥキー３ｃは、ユーザから処理の実行や決定の指示操作を受けるためのキーである。
【００３５】
ディスプレイ４は、各種キーの押下に応じたデータやグラフが表示される部分であって、ＬＣＤ（Liquid Crystal Display）等により構成されている。
【００３６】
図２は、グラフ関数電卓１の概略構成を示すブロック図である。この図に示すように、グラフ関数電卓１はＣＰＵ（Central Processing Unit）２０、入力部３０、表示部４０、ＲＯＭ（Read Only Memory）５０、ＲＡＭ（Random Access Memory）６０及び十進演算器７０を備えており、各部はバス８０で相互にデータ通信可能に接続されている。
【００３７】
入力部３０は、キー群３を備えており、押下されたキーの信号をＣＰＵ２０に出力するようになっている。なお、この入力部３０は、必ずしもキー群３を備える必要はなく、例えばタッチパネルを備えることとしてもよい。
【００３８】
表示部４０は、ディスプレイ４を備えており、ＣＰＵ２０から入力される各種信号に基づいて各種画面を表示するものである。この表示部４０は、ユーザの操作により任意桁での演算が指定された場合には、図３（ａ）に示すように、ユーザが計算桁数を入力するための演算桁数入力ボックス４１と、演算種類を指定するための演算種類指定ボックス４２と、被演算子を入力するための被演算子入力ボックス４３と、計算式を直接入力するための計算式入力ボックス４４と、計算結果を表示するための計算結果表示ボックス４５とを表示するようになっている。なお、図３（ｂ）に示すように、演算種類は演算種類指定ボックス４２のプルダウンメニューから選択・指定することが可能である。
【００３９】
ＣＰＵ２０は、図２に示すように、グラフ関数電卓１の各部を統括的に制御するものであり、入力される指示に応じて所定のプログラムに基づいた処理を実行し、各機能部への指示やデータの転送を行うようになっている。具体的には、ＣＰＵ２０は、入力部３０から入力される操作信号に応じてＲＯＭ５０に格納されたプログラムを読み出し、当該プログラムに従って処理を実行する。そして、ＣＰＵ２０は、処理結果を表示するための表示制御信号を適宜表示部４０に出力して、対応した表示情報を表示させる。
【００４０】
ＲＯＭ５０は、電源がＯＮ状態にされた際にグラフ関数電卓１を初期状態に設定するためのプログラムやデータの他、各実施形態において後述する計算処理を実現するためのプログラム等を格納している。
【００４１】
ＲＡＭ６０は、ＣＰＵ２０の作業領域として各種データを一時的に記憶するための記憶領域であり、図４に示すように、計算式格納領域６１、計算桁数格納領域６２、ｎ桁計算結果格納領域６３、ｎ＋ｍ桁計算結果格納領域６４及び最終計算結果格納領域６５を備えている。
【００４２】
計算式格納領域６１は、入力部３０等を介してユーザから入力された計算式を格納するための領域である。計算桁数格納領域６２は、入力部３０等を介してユーザから入力された計算桁数ｎ（但し、ｎは正の整数）の値を格納するための領域である。ｎ桁計算結果格納領域６３は、十進演算器７０により計算桁数ｎで計算された計算式全体の計算結果や、計算式中の各計算部分の計算結果を格納するための領域である。ｎ＋ｍ桁計算結果格納領域６４は、十進演算器７０により計算桁数ｎ＋ｍ（但し、ｍはｍ＜ｎを満たす正の整数）で計算された計算式全体の計算結果や、計算式中の各計算部分の計算結果を格納するための領域である。最終計算結果格納領域６５は、計算式全体の最終的な計算結果を格納するための領域である。なお、計算桁数とは、計算を行わせる桁数のことを指す。
【００４３】
十進演算器７０は、図２に示すように、機械語プログラムの機械語命令に従った十進演算を実行する演算装置であり、指定された任意の桁数で演算を行うようになっている。この十進演算器７０はプログラムＲＯＭ７１０を備えており、プログラムＲＯＭ７１０には、入力された任意の計算桁数で演算を行うための任意桁数演算プログラム７１０１と、複数演算種類７１０３とが格納されている。
【００４４】
図５は、十進演算器７０の回路構成を示すブロック図である。十進演算器７０は、プログラムＲＯＭ７１０と、プログラムカウンタ７１２と、ラッチ部７１４と、命令デコーダ７１６と、可変パラメータ記憶部７２０と、セレクタ７３１〜７３４と、アドレスカウンタ７４０を含むアドレス制御回路７５０と、レジスタ部７６０と、演算器７７０と、シフタ７８０とを備えている。以下、この十進演算器７０の構成と機能について説明する。
【００４５】
プログラムＲＯＭ７１０に格納されている任意桁数演算プログラム７１０１及び複数演算種類７１０３は、ユーザにより入力された計算桁数及び指定された演算種類に応じて適宜選択され、機械語の命令が１つずつ読み出されてラッチ部７１４に保持される。
【００４６】
ここで、機械語の１つの命令は、命令コードＯＰと４ビットの拡張命令コードＥＸＴとを持つ命令部及び２ビットのデータＦｕ、Ｓｕと４ビットのデータＦｌ、Ｓｌとを持つオペランド部で構成される。
【００４７】
レジスタ部７６０は、それぞれ１６ワードで構成される４本のレジスタＸ、Ｙ、Ｚ、Ａを備え、ユーザにより入力された演算データがＢＣＤコード化され、十進数で４桁毎（１６ビットで１ワード）に格納される。
【００４８】
４本のレジスタＸ、Ｙ、Ｚ、Ａは、オペランド部の２ビットのデータＦｕ、Ｓｕで指定することが可能である。また、１６個のワードは、図６（ａ）に示す通り、（１）直接アドレス方式と、（２）間接アドレス方式の２通りの方法で指定することが可能である。オペランド部の４ビットのデータＦｌ、Ｓｌで直接ワードを指定する方法が直接アドレス方式、命令部の拡張命令コードＥＸＴで可変パラメータ記憶部７２０のレジスタＷ、Ｖに格納されているデータｗ、ｖにアクセスし、この値を用いて間接的にワードを指定する方法が間接アドレス方式であって、どちらの方法によっても演算を行わせたいワードを指定することができる。
【００４９】
また、命令は（１）１ワード命令と、（２）連続ワード命令の２つに分類される。１ワード命令は、直接又は間接アドレス方式によって１つのワードを指定し、当該ワードに対する演算を行わせるための命令である。
【００５０】
一方、連続ワード命令は、直接又は間接アドレス方式によって開始ワード及び終了ワードを指定し、開始ワードから終了ワードまでの一連のワードを用いた演算を行わせるための命令である。
【００５１】
尚、間接アドレス方式にはワードを指定するワード指定と、桁を指定する桁指定とがある。ワード指定では、レジスタＶに格納されているデータｖにアクセスして、この値を用いてワードを指定することができるのに対し、桁指定では、レジスタＩに格納されているデータｉにアクセスし、この値を用いてワード内の桁を指定することができる。ワード指定では、ワード単位、即ち４桁単位での演算しか行わせることができないが、桁指定では、桁単位つまり任意の計算桁数での演算を行わせることができる。
【００５２】
間接／直接アドレス方式の別及び連続ワード／１ワード命令の別は、図６（ｂ）に示す通り、命令の４ビットの拡張命令コードＥＸＴで設定される。拡張命令コードＥＸＴの１ビット目のデータ（ＥＸＴ［１］）は連続ワード／１ワード命令の別を示し、連続ワード命令の場合には「０」、１ワード命令の場合には「１」がそれぞれ設定される。
【００５３】
拡張命令コードＥＸＴの２ビット目のデータ（ＥＸＴ［２］）及び３ビット目のデータ（ＥＸＴ［３］）は、間接／直接アドレス方式の別を示し、直接アドレス方式によるワード指定の場合には「００」、間接アドレス方式による桁指定の場合には「０１」、間接アドレス方式によるワード指定の場合には「１０」がそれぞれ設定される。
【００５４】
また、拡張命令コードＥＸＴの４ビット目のデータ（ＥＸＴ［４］）は間接／直接アドレス方式の別を示し、直接アドレス方式によるワード指定の場合には「０」、間接アドレス方式によるワード指定の場合には「１」がそれぞれ設定される。尚、ＥＸＴ［４］で、間接アドレス方式による桁指定の設定を行うことはできない。
【００５５】
次に、命令の意味と動作について具体例を挙げて説明する。
図６（ｃ）は、拡張命令コードＥＸＴが取り得る１２種類の値の内、４種類についての命令と、その動作内容を示す図である。同図において、命令部の「ＡＤＤ」は“加算”を表す命令コードであり、「ＡＤＤ」に続く４ビットのデータは拡張命令コードＥＸＴを表している。
【００５６】
（１）拡張命令コードＥＸＴ＝「００００」
この場合、命令は連続ワード命令であり、直接アドレス方式によるワード指定で実行される。まず、ラッチ部７１４には、Ｆｕ＝「００（Ｘ）」、Ｆｌ＝「１１１１（１５）」、Ｓｕ＝「０１（Ｙ）」、Ｓｌ＝「０１００（４）」、ＯＰ＝「ＡＤＤ」、ＥＸＴ＝「００００」がラッチされる。
【００５７】
セレクタ７３１〜７３４では、ＥＸＴ＝「００００」の各ビットのデータが選択制御信号として入力されると共に、各種データの選択・出力が行われる。この場合、セレクタ７３１からはＦｌ＝「１１１１」が選択・出力され、セレクタ７３２からはＳｌ＝「０１００」が選択・出力される。また、アドレスカウンタ７４０には、セレクタ７３２の出力データ即ちＳｌ＝「０１００」がセットされ、セレクタ７３３、７３４からは、アドレスカウンタ７４０の出力データ即ちＳｌ＝「０１００」が共に選択・出力される。
【００５８】
これにより、レジスタ部７６０のアドレス端子ＦａｄにはＦｕ＝「００」とＳｌ＝「０１００」とが入力されることで、レジスタＸの第４ワードに格納されている演算データが出力端子Ｆｏｕｔから出力される。また、アドレス端子ＳａｄにはＳｕ＝「０１」とＳｌ＝「０１００」とが入力されることで、レジスタＹの第４ワードに格納されている演算データが出力端子Ｓｏｕｔから出力される。
【００５９】
一方、命令デコーダ７１６では命令コードＯＰの「ＡＤＤ」が加算であると解読（デコード）され、加算を指示する演算制御信号が演算器７７０に出力される。これにより、演算器７７０では、レジスタ部７６０から出力された２つの演算データが加算され、その加算結果が入力端子Ｆｉｎに入力され、レジスタＸの第４ワードに書き込まれる（動作：Ｘ４＋Ｙ４→Ｘ４）。
【００６０】
その後は、アドレスカウンタ７４０がカウントアップし、アドレス制御回路７５０により命令終了信号「１」が出力されるまでの間、第４ワードから第１５ワードまでの一連のワードを用いた加算が繰り返し実行される（動作：Ｘ４〜１５＋Ｙ４〜１５→Ｘ４〜１５）。これにより、計算桁数「４８」（＝４×（１５−４＋１））桁での加算が実行される。
【００６１】
（２）拡張命令コードＥＸＴ＝「０１００」
この場合、命令は連続ワード命令であり、間接アドレス方式による桁指定で実行される。まず、ラッチ部７１４には、Ｆｕ＝「００（Ｘ）」、Ｆｌ＝「１１１１（１５）」、Ｓｕ＝「０１（Ｙ）」、Ｓｌ＝「＊」、ＯＰ＝「ＡＤＤ」、ＥＸＴ＝「０１００」がラッチされる。
【００６２】
セレクタ７３１からはＦｌ＝「１１１１」が選択・出力され、セレクタ７３２からはデータｉが選択・出力される。また、アドレスカウンタ７４０には、データｉがセットされ、セレクタ７３３、７３４からは、データｉが共に選択・出力される。
【００６３】
これにより、レジスタ部７６０のアドレス端子ＦａｄにはＦｕ＝「００」とデータｉとが入力されることで、レジスタＸの第ｉ桁に格納されている演算データが出力端子Ｆｏｕｔから出力される。また、アドレス端子ＳａｄにはＳｕ＝「０１」とデータｉとが入力されることで、レジスタＹの第ｉ桁に格納されている演算データが出力端子Ｓｏｕｔから出力される。
【００６４】
そして、演算器７７０では、レジスタ部７６０から出力された２つの演算データが加算され、その加算結果が入力端子Ｆｉｎに入力され、レジスタＸの第ｉ桁に書き込まれる（動作：Ｘｉ＋Ｙｉ→Ｘｉ）。
【００６５】
その後は、アドレスカウンタ７４０がカウントアップし、アドレス制御回路７５０により命令終了信号「１」が出力されるまでの間、第ｉ桁から第１５ワードまでの加算が繰り返し実行される（動作：Ｘｉ〜１５＋Ｙｉ〜１５→Ｘｉ〜１５）。ｉの値が可変であることから、ｉを変化させることで任意の計算桁数での演算が可能となる。
【００６６】
（３）拡張命令コードＥＸＴ＝「０００１」
この場合、命令は１ワード命令であり、直接アドレス方式によるワード指定で実行される。まず、ラッチ部７１４には、Ｆｕ＝「００（Ｘ）」、Ｆｌ＝「１１１１（１５）」、Ｓｕ＝「０１（Ｙ）」、Ｓｌ＝「０１００（４）」、ＯＰ＝「ＡＤＤ」、ＥＸＴ＝「０００１」がラッチされる。
【００６７】
セレクタ７３１からはＦｌ＝「１１１１」が選択・出力され、セレクタ７３２からはＳｌ＝「０１００」が選択・出力される。また、アドレスカウンタ７４０にはＳｌ＝「０１００」がセットされ、セレクタ７３３からはＦｌ＝「１１１１」、セレクタ７３４からはＳｌ＝「０１００」がそれぞれ選択・出力される。
【００６８】
これにより、レジスタ部７６０のアドレス端子ＦａｄにはＦｕ＝「００」とＦｌ＝「１１１１」とが入力されることで、レジスタＸの第１５ワードに格納されている演算データが出力端子Ｆｏｕｔから出力される。また、アドレス端子ＳａｄにはＳｕ＝「０１」とＳｌ＝「０１００」とが入力されることで、レジスタＹの第４ワードに格納されている演算データが出力端子Ｓｏｕｔから出力される。
【００６９】
そして、演算器７７０では、レジスタ部７６０から出力された２つの演算データが加算され、その加算結果が入力端子Ｆｉｎに入力され、レジスタＸの第１５ワードに書き込まれる（動作：Ｘ１５＋Ｙ４→Ｘ１５）。
【００７０】
一方、ＥＸＴ［１］が１であることから、アドレス制御回路７５０からは必ず命令終了信号「１」が出力され、命令の実行が終了する。これにより、レジスタＸの第１５ワードの演算データと、レジスタＹの第４ワードの演算データとが加算され、計算桁数「４」での演算が実行される。
【００７１】
（４）拡張命令コードＥＸＴ＝「１１０１」
この場合、命令は１ワード命令であり、間接アドレス方式による桁指定で実行される。まず、ラッチ部７１４には、Ｆｕ＝「００（Ｘ）」、Ｆｌ＝「＊」、Ｓｕ＝「０１（Ｙ）」、Ｓｌ＝「＊」、ＯＰ＝「ＡＤＤ」、ＥＸＴ＝「１１０１」がラッチされる。
【００７２】
セレクタ７３１からはデータｗが選択・出力され、セレクタ７３２からはデータｉが選択・出力される。また、アドレスカウンタ７４０にはデータｉがセットされ、セレクタ７３３からはデータｗ、セレクタ７３４からはデータｉがそれぞれ選択・出力される。
【００７３】
これにより、レジスタ部７６０のアドレス端子ＦａｄにはＦｕ＝「００」とデータｗとが入力されることで、レジスタＸの第ｗワードに格納されている演算データが出力端子Ｆｏｕｔから出力される。また、アドレス端子ＳａｄにはＳｕ＝「０１」とデータｉとが入力されることで、レジスタＹの第ｉ桁に格納されている演算データが出力端子Ｓｏｕｔから出力される。
【００７４】
そして、演算器７７０では、レジスタ部７６０から出力された２つの演算データが加算され、その加算結果が入力端子Ｆｉｎに入力され、レジスタＸの第ｗワードに書き込まれる（動作：Ｘｗ＋Ｙｉ→Ｘｗ）。
【００７５】
一方、ＥＸＴ［１］が１であることから、アドレス制御回路７５０からは必ず命令終了信号「１」が出力され、命令の実行が終了する。これにより、レジスタＸの第ｗワードの演算データと、レジスタＹの第ｉ桁の演算データとが加算される。
【００７６】
以上、４種類の命令のみを例に挙げて十進演算器７０の動作について説明したが、選択される機械語プログラム及び命令の種類により任意の計算桁数での演算を行うことが可能となる。
【００７７】
〔第１実施形態〕
以下、図２，図７〜図１２を参照して、本発明の第１実施形態について説明する。
【００７８】
まず、構成を説明する。
本実施形態におけるグラフ関数電卓１Ａは、上記共通形態におけるグラフ関数電卓１に対応するものであり、図２に示すように、上述のＲＯＭ５０としてＲＯＭ５０Ａを備えている。
【００７９】
ＲＯＭ５０Ａは、図７に示すように、本発明に係る計算プログラム５００を格納している。この計算プログラム５００は、後述の計算処理（図８参照）をＣＰＵ２０に実行させるものである。
【００８０】
続いて、グラフ関数電卓１Ａの動作を説明する。
図８は、ＣＰＵ２０により計算プログラム５００が読み出されて実行されることによりグラフ関数電卓１Ａにおいて実行される計算処理の流れを示すフローチャートである。
【００８１】
この図に示すように、まず、ユーザにより計算式と計算桁数ｎとが入力部３０を介して入力されると（ステップＳ１）、ＣＰＵ２０は、計算式を計算式格納領域６１に、計算桁数ｎを計算桁数格納領域６２に格納する。
【００８２】
次に、ＣＰＵ２０は、入力された計算式のうち、先頭の計算部分を指定した後（ステップＳ２）、指定した計算部分を計算桁数ｎで計算するための機械語プログラムを生成し、十進演算器７０に演算を実行させ（ステップＳ３）、計算結果をｎ桁計算結果格納領域６３に格納する。また、ＣＰＵ２０は、指定した計算部分を計算桁数ｎ＋ｍで実行するための機械語プログラムを生成し、十進演算器７０に演算を実行させる（ステップＳ４）。なお、計算式中の先頭の計算部分とは、計算式を計算するための計算順序における先頭の計算部分、つまり計算式中で始めに計算されるべき計算部分である。
【００８３】
次に、ＣＰＵ２０は、指定された計算部分が加減算であるか否かを判別し（ステップＳ５）、加減算でない場合（ステップＳ５；Ｎｏ）には、計算結果をそのままｎ＋ｍ桁計算結果格納領域６４に格納して後述のステップＳ１０の処理を行い、加減算である場合（ステップＳ５；Ｙｅｓ）には、計算桁数ｎ＋ｍでの計算結果のうち、最上位桁からｎ＋ｐ桁（但し、ｐはｐ≦ｍを満たす正の整数）まで、本実施の形態においては最上位桁からｎ＋１桁までの上位成分値が０になったか否かを判別する（ステップＳ６）。
【００８４】
このステップＳ６において上位成分値が０である場合（ステップＳ６；Ｙｅｓ）には、ＣＰＵ２０は、指定された計算部分の計算桁数ｎ，ｎ＋ｍでの計算結果を０として（ステップＳ７）、計算結果をｎ桁計算結果格納領域６３，ｎ＋ｍ桁計算結果格納領域６４にそれぞれ格納する。このように、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果の上位成分値が０になった場合に、計算桁数ｎでの計算結果を０とする補正を行うことにより、計算によって微小な誤差が生じても、０とすべき誤差であると適切に判断されて、計算結果が０に補正される。そのため、値が等しいはずの数値間での減算結果など、０になるべき計算結果が確実に０となる。
【００８５】
また、ステップＳ６において上位成分値が０でない場合（ステップＳ６；Ｎｏ）には、ＣＰＵ２０は、計算桁数ｎ＋ｍでの計算結果の全体が０ではなく、かつ、最上位桁が０であるか否か、つまり桁落ちが発生したか否かを判別し（ステップＳ８）、全体が０の場合や最上位桁が０でない場合（ステップＳ８；Ｎｏ）には、計算結果をそのままｎ＋ｍ桁計算結果格納領域６４に格納して後述のステップＳ１０の処理を行う。一方、ステップＳ８において全体が０でなく、かつ、最上位桁が０である場合（ステップＳ８；Ｙｅｓ）には、ＣＰＵ２０は、計算桁数ｎ＋ｍでの計算結果の最下位桁、つまりｎ＋ｍ桁目の値に＋１または−１を加えた後（ステップＳ９）、計算結果をｎ＋ｍ桁計算結果格納領域６４に格納する。このように、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、当該加減算結果の最下位桁を±１補正するので、計算桁数ｎでの計算結果と計算桁数ｎ＋ｍでの計算結果とが一致する場合であっても、これらの計算結果が相違し、相違の値が最小限の値となる。そのため、この補正が後述のステップＳ１２での丸め処理の結果に影響を及ぼすのが防止される。また、最小限の値で補正した計算結果を後述のステップＳ１１以降において計算式中の次の計算部分に用いる場合には、この計算部分に用いられる計算桁数ｎでの計算結果と補正後の計算桁数ｎ＋ｍでの計算結果とが相違するため、計算桁数ｎ＋ｍでの計算では、計算桁数ｎでの計算と比較して桁落ちによる誤差が小さくなる。
【００８６】
次に、ＣＰＵ２０は、計算式中に次の計算部分があるか否かを判別し（ステップＳ１０）、計算部分がある場合（ステップＳ１０；Ｙｅｓ）には、次の計算部分を指定した後（ステップＳ１１）、上述のステップＳ３〜ステップＳ１０の処理を繰り返す。これにより、計算式中の全ての計算部分の計算が終了し、計算式全体の計算結果が算出される。
【００８７】
一方、ステップＳ１０において次の計算部分がない場合（ステップＳ１０；Ｎｏ）には、ＣＰＵ２０は、計算桁数ｎ＋ｍでの計算結果を計算桁数ｎでの計算結果に丸める丸め処理によって、計算式全体の計算結果を算出する（ステップＳ１２）。ここで、本実施の形態における丸め処理においては、計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、値が一致しない最上位の不一致桁よりも１つ下位の桁で計算桁数ｎ＋ｍでの計算結果を四捨五入した後、四捨五入後の計算結果に対して、計算桁数ｎでの計算結果のうち、不一致桁の数値を揃える処理を行っている。
【００８８】
そして、ＣＰＵ２０は、計算式全体についての最終的な計算結果を最終計算結果格納領域６５に格納するとともに表示部４０に表示させ（ステップＳ１３）、計算処理を終了する。
【００８９】
次に、これまでの処理の具体例（１）〜（６）について説明する。なお、以下の具体例においては、桁数「ｍ」の値を４として説明する。
【００９０】
（１）計算式：３×√７−√６３、計算桁数：７の場合
図９（ａ）は、計算式「３×√７−√６３」、計算桁数「７」が入力された場合のグラフ関数電卓１Ａの内部処理を概念的に示す図である。
【００９１】
この図に示すように、まず、ユーザにより計算式「３×√７−√６３」が計算式入力ボックス４４に入力され、計算桁数「７」が演算桁数入力ボックス４１に入力されると（図８のステップＳ１）、ＣＰＵ２０が計算式中の先頭の計算部分、つまり「３×√７」の乗算部分を指定した後（図８のステップＳ２）、この計算部分を計算桁数「７」で十進演算器７０に演算させ（図８のステップＳ３）、当該計算部分の計算結果「７．９３７２５３」をｎ桁計算結果格納領域６３に格納する。
【００９２】
次に、ＣＰＵ２０は、計算部分を計算桁数「１１」で十進演算器７０に演算させ（図８のステップＳ４）、指定された計算部分が加減算ではないと判断し（図８のステップＳ５；Ｎｏ）、計算結果「７．９３７２５３９３３３」をそのままｎ＋ｍ桁計算結果格納領域６４に格納する。
【００９３】
次に、ＣＰＵ２０は、計算式中に次の計算部分、つまり「（３×√７の計算結果）−√６３」の減算部分があると判断し（図８のステップＳ１０；Ｙｅｓ）、この計算部分を指定した後（図８のステップＳ１１）、計算桁数「７」で十進演算器７０に演算させ（図８のステップＳ３）、計算結果「−１Ｅ−６」を得る。なお、この計算結果の内、「−１」は仮数部、「Ｅ−６」は指数部をそれぞれ表している。
【００９４】
次に、ＣＰＵ２０は、減算部分を計算桁数「１１」で十進演算器７０に演算させ（図８のステップＳ４）、計算結果「１Ｅ−１０」を得る。次に、ＣＰＵ２０は、計算部分が減算であり（図８のステップＳ５；Ｙｅｓ）、計算結果「１Ｅ−１０」のうち、最上位桁から８桁までの上位成分値が０になっている（図８のステップＳ６；Ｙｅｓ）と判断し、この計算部分の計算結果を０として（図８のステップＳ７）、ｎ桁計算結果格納領域６３，ｎ＋ｍ桁計算結果格納領域６４にそれぞれ格納する。このように、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果「１Ｅ−１０」の上位成分値が０になった場合に、計算桁数ｎでの計算結果「−１Ｅ−６」を０とする補正を行うことにより、計算によって微小な誤差が生じても、０とすべき誤差であると適切に判断されて、計算結果が０に補正される。そのため、値が等しいはずの数値間での減算結果など、０になるべき計算結果が確実に０となる。
【００９５】
そして、ＣＰＵ２０は、計算式中に次の計算部分がないと判断した後（図８のステップＳ１０；Ｎｏ）、丸め処理により計算桁数「７」での計算式全体の計算結果を０として（図８のステップＳ１２）、当該計算結果を表示部４０の計算結果表示ボックス４５に表示させ（図８のステップＳ１３）、計算処理を終了する。
【００９６】
（２）計算式：１−１÷３×３、計算桁数：７の場合
図９（ｂ）は、計算式「１−１÷３×３」、計算桁数「７」が入力された場合のグラフ関数電卓１Ａの内部処理を概念的に示す図である。
【００９７】
この図に示すように、まず、ユーザにより計算式「１−１÷３×３」が計算式入力ボックス４４に入力され、計算桁数「７」が演算桁数入力ボックス４１に入力されると（図８のステップＳ１）、ＣＰＵ２０が計算式中の先頭の計算部分、つまり「１÷３」の除算部分を指定した後（図８のステップＳ２）、この計算部分を計算桁数「７」で十進演算器７０に演算させ（図８のステップＳ３）、当該計算部分の計算結果をｎ桁計算結果格納領域６３に格納する。
【００９８】
次に、ＣＰＵ２０は、「１÷３」の計算部分を計算桁数「１１」で十進演算器７０に演算させ（図８のステップＳ４）、指定された計算部分が加減算ではないと判断し（図８のステップＳ５；Ｎｏ）、計算結果をそのままｎ＋ｍ桁計算結果格納領域６４に格納する。
【００９９】
次に、ＣＰＵ２０は、計算式中に次の計算部分、つまり「（１÷３の計算結果）×３」の乗算部分があると判断し（図８のステップＳ１０；Ｙｅｓ）、この計算部分を指定した後（図８のステップＳ１１）、計算桁数「７」で十進演算器７０に演算させ（図８のステップＳ３）、当該計算部分の計算結果「０．９９９９９９９」をｎ桁計算結果格納領域６３に格納する。次に、ＣＰＵ２０は、同じ計算部分を計算桁数「１１」で十進演算器７０に演算させ（図８のステップＳ４）、指定された計算部分が加減算ではないと判断し（図８のステップＳ５；Ｎｏ）、計算結果「０．９９９９９９９９９９９」をそのままｎ＋ｍ桁計算結果格納領域６４に格納する。
【０１００】
次に、ＣＰＵ２０は、計算式中に次の計算部分、つまり「１−（１÷３×３の計算結果）の減算部分があると判断し（図８のステップＳ１０；Ｙｅｓ）、この計算部分を指定した後（図８のステップＳ１１）、計算桁数「７」で十進演算器７０に演算させ（図８のステップＳ３）、計算結果「−１Ｅ−７」を得る。
【０１０１】
次に、ＣＰＵ２０は、減算部分を計算桁数「１１」で十進演算器７０に演算させ（図８のステップＳ４）、計算結果「１Ｅ−１１」を得る。次に、ＣＰＵ２０は、計算部分が減算であり（図８のステップＳ５；Ｙｅｓ）、計算結果「１Ｅ−１０」のうち、最上位桁から８桁までの上位成分値が０になっている（図８のステップＳ６；Ｙｅｓ）と判断し、この計算部分の計算結果を０として（図８のステップＳ７）、ｎ桁計算結果格納領域６３，ｎ＋ｍ桁計算結果格納領域６４にそれぞれ格納する。このように、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果「１Ｅ−１１」の上位成分値が０になった場合に、計算桁数ｎでの計算結果「−１Ｅ−７」を０とする補正を行うことにより、計算によって微小な誤差が生じても、０とすべき誤差であると適切に判断されて、計算結果が０に補正される。そのため、値が等しいはずの数値間での減算結果など、０になるべき計算結果が確実に０となる。
【０１０２】
そして、ＣＰＵ２０は、計算式中に次の計算部分がないと判断した後（図８のステップＳ１０；Ｎｏ）、丸め処理より計算桁数「７」での計算式全体の計算結果を０として（図８のステップＳ１２）、当該計算結果を表示部４０の計算結果表示ボックス４５に表示させ（図８のステップＳ１３）、計算処理を終了する。
【０１０３】
（３）計算式：１−０．９９９９９９９、計算桁数：７の場合
図９（ｃ）は、計算式「１−０．９９９９９９９」、計算桁数「７」が入力された場合のグラフ関数電卓１Ａの内部処理を概念的に示す図である。
【０１０４】
この図に示すように、まず、ユーザにより計算式「１−０．９９９９９９９」が計算式入力ボックス４４に入力され、計算桁数「７」が演算桁数入力ボックス４１に入力されると（図８のステップＳ１）、ＣＰＵ２０が計算式中の先頭の計算部分、つまり「１−０．９９９９９９９」の減算部分を指定した後（図８のステップＳ２）、この計算部分を計算桁数「７」で十進演算器７０に演算させ（図８のステップＳ３）、当該計算部分の計算結果「１Ｅ−７」をｎ桁計算結果格納領域６３に格納する。
【０１０５】
次に、ＣＰＵ２０は、減算部分を計算桁数「１１」で十進演算器７０に演算させ（図８のステップＳ４）、計算結果「１Ｅ−７」を得る。次に、ＣＰＵ２０は、計算部分が減算であり（図８のステップＳ５；Ｙｅｓ）、計算結果「１Ｅ−７」のうち、最上位桁から８桁までの上位成分値が０になってはおらず（図８のステップＳ６；Ｎｏ）、また、減算結果の全体が０ではなく、かつ最上位桁が０である（図８のステップＳ８；Ｙｅｓ）と判断し、計算結果の１１桁目に±１を加えた後（図８のステップＳ９）、計算結果「０．００００００１０００１」または「０．０００００００９９９９」をｎ＋ｍ桁計算結果格納領域６４に格納する。
【０１０６】
そして、ＣＰＵ２０は、計算式中に次の計算部分がないと判断した後（図８のステップＳ１０；Ｎｏ）、丸め処理により計算桁数「７」での計算式全体の計算結果を１Ｅ−７として（図８のステップＳ１２）、当該計算結果を表示部４０の計算結果表示ボックス４５に表示させ（図８のステップＳ１３）、計算処理を終了する。
【０１０７】
このように、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、ステップＳ９において当該加減算結果の最下位桁を±１補正するので、計算桁数ｎでの計算結果と計算桁数ｎ＋ｍでの計算結果とが一致する場合であっても、これらの計算結果が相違し、相違の値が最小限の値となる。そのため、ステップＳ９での補正がステップＳ１２での丸め処理の結果に影響を及ぼすのが防止される。
【０１０８】
（４）計算式：（１＋cosｘ）／ｘ、ｘの値：３．１４１５９３、計算桁数：１５の場合
図１０は、計算式「（１＋cosｘ）／ｘ」、ｘの値「３．１４１５９３」、計算桁数「１５」が入力された場合のグラフ関数電卓１Ａの内部処理を概念的に示す図である。
【０１０９】
図１０（ａ）に示すように、まず、ユーザにより演算種類指定ボックス４２のプルダウンメニューから計算式「（１＋cosｘ）／ｘ」が選択され、ｘの値「３．１４１５９３」が被演算子入力ボックス４３に入力され、計算桁数「１５」が演算桁数入力ボックス４１に入力されると（図８のステップＳ１）、ＣＰＵ２０が計算式中の先頭の計算部分、つまり「cosｘ」の三角関数部分を指定した後（図８のステップＳ２）、この計算部分を計算桁数「１５」で十進演算器７０に演算させ（図８のステップＳ３）、当該計算部分の計算結果「−９．９９９９９９９９９９９９４０Ｅ−０１」をｎ桁計算結果格納領域６３に格納する。
【０１１０】
次に、ＣＰＵ２０は、計算部分を計算桁数「１９」で十進演算器７０に演算させ（図８のステップＳ４）、指定された計算部分が加減算ではないと判断し（図８のステップＳ５；Ｎｏ）、計算結果「−９．９９９９９９９９９９９９４０００００Ｅ−０１」をそのままｎ＋ｍ桁計算結果格納領域６４に格納する。
【０１１１】
次に、図１０（ｂ）に示すように、ＣＰＵ２０は、計算式中に次の計算部分、つまり「１＋cosｘ」の加算部分があると判断し（図８のステップＳ１０；Ｙｅｓ）、この計算部分を指定した後（図８のステップＳ１１）、計算桁数「１５」で十進演算器７０に演算させ（図８のステップＳ３）、計算結果「６．０Ｅ−１４」を得る。
【０１１２】
次に、ＣＰＵ２０は、加算部分を計算桁数「１９」で十進演算器７０に演算させ（図８のステップＳ４）、計算結果「６．０００００Ｅ−１４」を得る。次に、ＣＰＵ２０は、計算部分が加算であり（図８のステップＳ５；Ｙｅｓ）、計算結果「６．０００００Ｅ−１４」のうち、最上位桁から１６桁までの上位成分値は０になっておらず（図８のステップＳ６；Ｙｅｓ）、また、減算結果の全体が０ではなく、かつ最上位桁が０である（図８のステップＳ８；Ｙｅｓ）と判断し、計算結果の１９桁目に±１、本動作例では＋１を加えた後（図８のステップＳ９）、計算結果「６．００００１Ｅ−１４」をｎ＋ｍ桁計算結果格納領域６４に格納する。これにより、桁落ちが発生した場合には、偶然に計算桁数ｎでの計算結果と計算桁数ｎ＋ｍでの計算結果とが一致する場合であっても、これらの計算結果が最小限の値で相違する。
【０１１３】
次に、図１０（ｃ）に示すように、ＣＰＵ２０は、計算式中に次の計算部分、つまり「（１＋cosｘの計算結果）／ｘ」の除算部分があると判断し（図８のステップＳ１０；Ｙｅｓ）、この計算部分を指定した後（図８のステップＳ１１）、計算桁数「１５」で十進演算器７０に演算させ（図８のステップＳ３）、計算結果「１．９０９８５９１０６５１０６１Ｅ−１４」を得る。
【０１１４】
次に、ＣＰＵ２０は、除算部分を計算桁数「１９」で十進演算器７０に演算させ（図８のステップＳ４）、計算結果「１．９０９８６２２８９６０９１２５０５２Ｅ−１４」を得る。次に、ＣＰＵ２０は、計算部分が加減算ではないと判断し（図８のステップＳ５；Ｎｏ）、この計算部分の計算結果をそのままｎ＋ｍ桁計算結果格納領域６４に格納する。
【０１１５】
このように、ステップＳ９において最小限の値で補正した計算結果を計算式中の次の計算部分に用いることにより、この計算部分に用いられる計算桁数ｎでの計算結果と補正後の計算桁数ｎ＋ｍでの計算結果とが相違するため、計算桁数ｎ＋ｍでの計算では、計算桁数ｎでの計算と比較して桁落ちによる誤差が小さくなる。
【０１１６】
そして、図１０（ｄ）に示すように、ＣＰＵ２０は、計算式中に次の計算部分がないと判断した後（図８のステップＳ１０；Ｎｏ）、丸め処理により計算桁数「１５」での計算式全体の計算結果を「１．９０９８６Ｅ−１４」として（図８のステップＳ１２）、当該計算結果を表示部４０の計算結果表示ボックス４５に表示させ（図８のステップＳ１３）、計算処理を終了する。
【０１１７】
（５）計算式：（１＋cosｘ）／ｘ、ｘの値：３．１４１５９３、計算桁数：１５の場合
図１１は、計算式「（１＋cosｘ）／ｘ」、ｘの値「３．１４１５９３」、計算桁数「１５」が入力された場合のグラフ関数電卓１Ａの内部処理を概念的に示す図である。なお、本動作例（５）では、図８のステップＳ９において、計算結果の１９桁目に＋１ではなく、−１を加える処理までが上述の動作具体例（４）と同様であるため、これ以降の処理について説明する。
【０１１８】
図１１（ａ）に示すように、本動作例（５）におけるＣＰＵ２０は、計算式中の加算部分「１＋cosｘ」を計算桁数「１９」で十進演算器７０に演算させ（図８のステップＳ４）、計算結果「６．０００００Ｅ−１４」を得た後、計算部分が加算であり（図８のステップＳ５；Ｙｅｓ）、計算結果「６．０００００Ｅ−１４」のうち、最上位桁から１６桁までの上位成分値は０になっておらず（図８のステップＳ６；Ｙｅｓ）、また、減算結果の全体が０ではなく、かつ最上位桁が０である（図８のステップＳ８；Ｙｅｓ）と判断し、計算結果の１９桁目に−１を加えた後（図８のステップＳ９）、計算結果「５．９９９９９Ｅ−１４」をｎ＋ｍ桁計算結果格納領域６４に格納する。これにより、桁落ちが発生した場合には、偶然に計算桁数ｎでの計算結果と計算桁数ｎ＋ｍでの計算結果とが一致する場合であっても、これらの計算結果が最小限の値で相違する。
【０１１９】
次に、図１１（ｂ）に示すように、ＣＰＵ２０は、計算式中に次の計算部分、つまり「（１＋cosｘの計算結果）／ｘ」の除算部分があると判断し（図８のステップＳ１０；Ｙｅｓ）、この計算部分を指定した後（図８のステップＳ１１）、計算桁数「１５」で十進演算器７０に演算させ（図８のステップＳ３）、計算結果「１．９０９８５９１０６５１０６１Ｅ−１４」を得る。
【０１２０】
次に、ＣＰＵ２０は、除算部分を計算桁数「１９」で十進演算器７０に演算させ（図８のステップＳ４）、計算結果「１．９０９８５５９２３４１２１０３３５Ｅ−１４」を得る。次に、ＣＰＵ２０は、計算部分が加減算ではないと判断し（図８のステップＳ５；Ｎｏ）、この計算部分の計算結果をそのままｎ＋ｍ桁計算結果格納領域６４に格納する。
【０１２１】
このように、ステップＳ９において最小限の値で補正した計算結果を計算式中の次の計算部分に用いることにより、この計算部分に用いられる計算桁数ｎでの計算結果と補正後の計算桁数ｎ＋ｍでの計算結果とが相違するため、計算桁数ｎ＋ｍでの計算では、計算桁数ｎでの計算と比較して桁落ちによる誤差が小さくなる。
【０１２２】
そして、図１１（ｃ）に示すように、ＣＰＵ２０は、計算式中に次の計算部分がないと判断した後（図８のステップＳ１０；Ｎｏ）、丸め処理により計算桁数「１５」での計算式全体の計算結果を「１．９０９８６Ｅ−１４」として（図８のステップＳ１２）、当該計算結果を表示部４０の計算結果表示ボックス４５に表示させ（図８のステップＳ１３）、計算処理を終了する。
【０１２３】
（６）計算式：√５−２．２３６０、計算桁数：７の場合
図１２は、計算式「√５−２．２３６０」、計算桁数「７」が入力された場合のグラフ関数電卓１Ａの内部処理を概念的に示す図である。
【０１２４】
図１２（ａ）に示すように、まず、ユーザにより計算式「√５−２．２３６０」が計算式入力ボックス４４に入力され、計算桁数「７」が演算桁数入力ボックス４１に入力されると（図８のステップＳ１）、ＣＰＵ２０が計算式中の先頭の計算部分、つまり「√５−２．２３６０」の減算部分を指定した後（図８のステップＳ２）、この計算部分を計算桁数「７」で十進演算器７０に演算させ（図８のステップＳ３）、当該計算部分の計算結果「０．００００６７」をｎ桁計算結果格納領域６３に格納する。
【０１２５】
次に、ＣＰＵ２０は、減算部分を計算桁数「１１」で十進演算器７０に演算させ（図８のステップＳ４）、計算結果「０．００００６７９７７４」を得る。次に、ＣＰＵ２０は、計算部分が減算であり（図８のステップＳ５；Ｙｅｓ）、計算結果「０．００００６７９７７４」のうち、最上位桁から８桁までの上位成分値が０になってはおらず（図８のステップＳ６；Ｎｏ）、また、減算結果の全体が０ではなく、かつ最上位桁が０である（図８のステップＳ８；Ｙｅｓ）と判断し、計算結果の１１桁目に±１（ここでは＋１）を加えた後（図８のステップＳ９）、計算結果「０．００００６７９７７５」をｎ＋ｍ桁計算結果格納領域６４に格納する。
【０１２６】
そして、図１２（ｂ）に示すように、ＣＰＵ２０は、計算式中に次の計算部分がないと判断した後（図８のステップＳ１０；Ｎｏ）、丸め処理により計算桁数「７」での計算式全体の計算結果を０．００００６８として（図８のステップＳ１２）、当該計算結果を表示部４０の計算結果表示ボックス４５に表示させ（図８のステップＳ１３）、計算処理を終了する。
【０１２７】
このように、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、ステップＳ９において当該加減算結果の最下位桁を±１補正するので、計算桁数ｎでの計算結果と計算桁数ｎ＋ｍでの計算結果とが一致する場合であっても、これらの計算結果が相違し、相違の値が最小限の値となる。そのため、ステップＳ９での補正がステップＳ１２での丸め処理の結果に影響を及ぼすのが防止される。
【０１２８】
以上のように、本実施の形態におけるグラフ関数電卓１Ａによれば、図８のステップＳ７や動作の具体例（１），（２）に示したように、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果の上位成分値が０になった場合に、計算桁数ｎでの計算結果を０とする補正を行うことにより、計算によって微小な誤差が生じても、０とすべき誤差であると適切に判断されて、計算結果が０に補正される。従って、微小な誤差が生じた場合に０とすべきか否かを判別できなかった従来の場合と異なり、誤差の集積による計算精度の悪化を防止して、計算精度を高めることができる。
【０１２９】
また、図８のステップＳ２〜ステップＳ１１に示したように、加減算の計算部分ごとにステップＳ７で計算結果の補正を行うことにより、複数の加減算が含まれる計算式であっても、計算精度を確実に高めることができる。
【０１３０】
また、図８のステップＳ９に示したように、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、この加減算結果の最下位桁を±１補正することにより、桁落ちが発生した場合には、偶然に計算桁数ｎでの計算結果と計算桁数ｎ＋ｍでの計算結果とが一致する場合であっても、これらの計算結果を相違させ、相違の値を最小限の値とすることができる。そのため、動作の具体例（４），（５）に示したように、ステップＳ９での補正後の計算結果を計算式中の次の計算部分に用いる場合には、この計算に用いられる計算桁数ｎでの計算結果と補正後の計算桁数ｎ＋ｍでの計算結果とが相違するため、当該計算部分について、計算桁数ｎ＋ｍでの計算では、計算桁数ｎでの計算と比較して桁落ちによる誤差を小さくすることができる。従って、このような計算桁数ｎ＋ｍでの計算結果をステップＳ１２での丸め処理に用いることにより、従来と比較して計算精度を高めることができる。一方、動作の具体例（３），（６）に示したように、ステップＳ９での補正後の計算結果をそのままステップＳ１２での丸め処理に用いる場合には、相違の値が最小限の値であるため、ステップＳ９での補正がステップＳ１２での丸め処理の結果に影響を及ぼすのを防止することができる。
【０１３１】
また、図８のステップＳ１２や動作の具体例（１）〜（６）に示したように、丸め処理を行うことにより、計算精度を更に高めるすることができる。
【０１３２】
〔第２実施形態〕
続いて、図２，図１３〜１４を参照して、本発明の第２実施形態について説明する。
まず、構成を説明する。
【０１３３】
本実施形態におけるグラフ関数電卓１Ｂは、上記共通形態におけるグラフ関数電卓１に対応するものであり、図２に示すように、上述のＲＯＭ５０としてＲＯＭ５０Ｂを備えている。
【０１３４】
ＲＯＭ５０Ｂは、図７に示すように、本発明に係る計算プログラム５０１を格納している。この計算プログラム５０１は、後述の計算処理（図１３参照）をＣＰＵ２０に実行させるものである。
【０１３５】
続いて、グラフ関数電卓１Ｂの動作を説明する。
図１３は、ＣＰＵ２０により計算プログラム５０１が読み出されて実行されることによりグラフ関数電卓１Ｂにおいて実行される計算処理の流れを示すフローチャートである。
【０１３６】
この図に示すように、まず、ユーザにより計算式と計算桁数ｎとが入力部３０を介して入力されると（ステップＴ１）、ＣＰＵ２０は、計算式を計算式格納領域６１に、計算桁数ｎを計算桁数格納領域６２に格納する。
【０１３７】
次に、ＣＰＵ２０は、入力された計算式のうち、先頭の計算部分を指定した後（ステップＴ２）、指定した計算部分を計算桁数ｎ，ｎ＋ｍで計算するための機械語プログラムをそれぞれ生成し、十進演算器７０に演算を実行させ（ステップＴ３，ステップＴ４）、計算桁数ｎでの計算結果をｎ桁計算結果格納領域６３に格納する。
【０１３８】
次に、ＣＰＵ２０は、計算桁数ｎ＋ｍでの計算結果の絶対値が計算桁数ｎでの計算結果の絶対値に対して所定倍率以下、本実施の形態においては１０-3倍以下であるか否かを判別する（ステップＴ５）。
【０１３９】
このステップＴ５において所定倍率以下である場合（ステップＴ５；Ｙｅｓ）には、ＣＰＵ２０は、指定された計算部分の計算結果を０として（ステップＴ６）、計算結果をｎ桁計算結果格納領域６３，ｎ＋ｍ桁計算結果格納領域６４にそれぞれ格納する。このように、計算桁数ｎ＋ｍでの計算結果の絶対値が計算桁数ｎでの計算結果の絶対値に対して１０-3倍以下である場合に、計算桁数ｎでの計算結果を０とすることにより、計算桁数が多くなるほど０に近づくような計算結果など、０になるべき計算結果が確実に０となる。
【０１４０】
また、ステップＴ５において所定倍率以下でない場合（ステップＴ５；Ｎｏ）には、ＣＰＵ２０は、指定された計算部分が加減算であるか否かを判別し（ステップＴ７）、加減算でない場合（ステップＴ７；Ｎｏ）には、計算桁数ｎ＋ｍでの計算結果をそのままｎ＋ｍ桁計算結果格納領域６４に格納して後述のステップＴ１０の処理を行い、加減算である場合（ステップＴ７；Ｙｅｓ）には、計算桁数ｎ＋ｍでの計算結果の全体が０ではなく、かつ、最上位桁が０であるか否か、つまり桁落ちが発生したか否かを判別する（ステップＴ８）。
【０１４１】
次に、このステップＴ８において全体が０の場合や最上位桁が０でない場合（ステップＴ８；Ｎｏ）には、ＣＰＵ２０は、計算桁数ｎ＋ｍでの計算結果をそのままｎ＋ｍ桁計算結果格納領域６４に格納して後述のステップＴ１０の処理を行う。一方、ステップＴ８において全体が０でなく、かつ、最上位桁が０である場合（ステップＴ８；Ｙｅｓ）には、ＣＰＵ２０は、計算桁数ｎ＋ｍでの計算結果の最下位桁、つまりｎ＋ｍ桁目の値に＋１または−１を加えた後（ステップＴ９）、この計算結果をｎ＋ｍ桁計算結果格納領域６４に格納する。このように、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、当該加減算結果の最下位桁を±１補正するので、計算桁数ｎでの計算結果と計算桁数ｎ＋ｍでの計算結果とが一致する場合であっても、これらの計算結果が相違し、相違の値が最小限の値となる。そのため、この補正が後述のステップＴ１２での丸め処理の結果に影響を及ぼすのが防止される。また、最小限の値で補正した計算結果を後述のステップＴ１１以降において計算式中の次の計算部分に用いる場合には、この計算部分に用いられる計算桁数ｎでの計算結果と補正後の計算桁数ｎ＋ｍでの計算結果とが相違するため、計算桁数ｎ＋ｍでの計算では、計算桁数ｎでの計算と比較して桁落ちによる誤差が小さくなる。
【０１４２】
次に、ＣＰＵ２０は、計算式中に次の計算部分があるか否かを判別し（ステップＴ１０）、計算部分がある場合（ステップＴ１０；Ｙｅｓ）には、次の計算部分を指定した後（ステップＴ１１）、上述のステップＴ３〜ステップＴ１０の処理を繰り返す。これにより、計算式中の全ての計算部分の計算が終了し、計算式全体の計算結果が算出される。
【０１４３】
一方、ステップＴ１０において次の計算部分がない場合（ステップＴ１０；Ｎｏ）には、ＣＰＵ２０は、計算桁数ｎ＋ｍでの計算結果を計算桁数ｎでの計算結果に丸める丸め処理によって、計算式全体の計算結果を算出する（ステップＴ１２）。ここで、本実施の形態における丸め処理においては、計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較し、値が一致しない最上位の不一致桁よりも１つ下位の桁で計算桁数ｎ＋ｍでの計算結果を四捨五入した後、四捨五入後の計算結果に対して、計算桁数ｎでの計算結果のうち、不一致桁の数値を揃える処理を行っている。
【０１４４】
そして、ＣＰＵ２０は、計算式全体についての最終的な計算結果を最終計算結果格納領域６５に格納するとともに表示部４０に表示させ（ステップＴ１３）、計算処理を終了する。
【０１４５】
次に、これまでの処理の具体例（７）について説明する。なお、以下の具体例においては、桁数「ｍ」の値を４として説明する。
【０１４６】
（７）計算式：sin（π×９９）、計算桁数：７の場合
図１４は、計算式「sin（π×９９）」、計算桁数「７」が入力された場合のグラフ関数電卓１Ｂの内部処理を概念的に示す図である。
【０１４７】
図１４（ａ）に示すように、まず、ユーザにより計算式「sin（π×９９）」が計算式入力ボックス４４に入力され、計算桁数「７」が演算桁数入力ボックス４１に入力されると（図１３のステップＴ１）、ＣＰＵ２０が計算式中の先頭の計算部分、つまり「π×９９」の乗算部分を指定した後（図１３のステップＴ２）、この計算部分を計算桁数「７」，「１１」で十進演算器７０にそれぞれ演算させ（図１３のステップＴ３，ステップＴ４）、当該計算部分の計算桁数「７」での計算結果「３１１．０１７７」をｎ桁計算結果格納領域６３に格納する。
【０１４８】
次に、ＣＰＵ２０は、計算桁数「１１」での計算結果の絶対値が計算桁数「７」での計算結果の絶対値に対して１０-3倍以下ではなく（図１３のステップＴ５；Ｎｏ）、指定された計算部分が加減算ではない（図１３のステップＴ７；Ｎｏ）と判断し、計算桁数「１１」での計算結果「３１１．０１７６７２７１」をｎ＋ｍ桁計算結果格納領域６４に格納する。
【０１４９】
次に、ＣＰＵ２０は、計算式中に次の計算部分、つまり「sin（π×９９の計算結果）」の三角関数部分があると判断し（図１３のステップＴ１０；Ｙｅｓ）、この計算部分を指定した後（図１３のステップＴ１１）、計算桁数「７」，「１１」で十進演算器７０にそれぞれ演算させ（図１３のステップＴ３，ステップＴ４）、当該計算部分の計算桁数「７」での計算結果「-２．７３３９９９Ｅ−５」をｎ桁計算結果格納領域６３に格納する。
【０１５０】
次に、図１４（ｂ）に示すように、ＣＰＵ２０は、計算桁数「１１」での計算結果の絶対値が計算桁数「７」での計算結果の絶対値に対して１０-3倍以下であると判断し（図１３のステップＴ５；Ｙｅｓ）、指定された計算部分の計算桁数「７」，「１１」での計算結果を０として（図１３のステップＴ６）、ｎ桁計算結果格納領域６３，ｎ＋ｍ桁計算結果格納領域６４にそれぞれ格納する。このように、計算桁数ｎ＋ｍでの計算結果の絶対値が計算桁数ｎでの計算結果の絶対値に対して１０-3倍以下である場合に、計算桁数ｎでの計算結果を０とする補正を行うことにより、計算によって微小な誤差が生じても、０とすべき誤差であると適切に判断されて、計算結果が０に補正される。そのため、計算桁数が多くなるほど０に近づくような計算結果など、０になるべき計算結果が確実に０となる。
【０１５１】
そして、図１４（ｃ）に示すように、ＣＰＵ２０は、計算式中に次の計算部分がないと判断した後（図１３のステップＴ１０；Ｎｏ）、丸め処理により計算桁数「７」での計算式全体の計算結果を０として（図１３のステップＴ１２）、当該計算結果を表示部４０の計算結果表示ボックス４５に表示させ（図１３のステップＴ１３）、計算処理を終了する。
【０１５２】
以上のように、本実施の形態におけるグラフ関数電卓１Ｂによれば、図１３のステップＴ７や動作の具体例（７）に示したように、計算桁数ｎ＋ｍでの計算結果の絶対値が計算桁数ｎでの計算結果の絶対値に対して１０-3倍以下である場合に、計算桁数ｎでの計算結果を０とする補正を行うことにより、計算によって微小な誤差が生じても、０とすべき誤差であると適切に判断されて、計算結果が０に補正される。従って、微小な誤差が生じた場合に０とすべきか否かを判別できなかった従来の場合と異なり、誤差の集積による計算精度の悪化を防止して、計算精度を高めることができる。
【０１５３】
また、図１３のステップＴ２〜ステップＴ１１に示したように、計算部分ごとにステップＴ７で計算結果の補正を行うことにより、計算精度を確実に高めることができる。
【０１５４】
また、図１３のステップＴ９に示したように、計算式中の加減算について、計算桁数ｎ＋ｍでの加減算結果の全体が０ではなく、最上位桁が０である場合に、この加減算結果の最下位桁を±１補正することにより、桁落ちが発生した場合には、偶然に計算桁数ｎでの計算結果と計算桁数ｎ＋ｍでの計算結果とが一致する場合であっても、これらの計算結果を相違させ、相違の値を最小限の値とすることができる。そのため、ステップＴ９での補正後の計算結果を計算式中の次の計算部分に用いる場合には、この計算に用いられる計算桁数ｎでの計算結果と補正後の計算桁数ｎ＋ｍでの計算結果とが相違するため、当該計算部分について、計算桁数ｎ＋ｍでの計算では、計算桁数ｎでの計算と比較して桁落ちによる誤差を小さくすることができる。従って、このような計算桁数ｎ＋ｍでの計算結果をステップＴ１２での丸め処理に用いることにより、従来と比較して計算精度を高めることができる。一方、ステップＴ９での補正後の計算結果をそのままステップＴ１２での丸め処理に用いる場合には、相違の値が最小限の値であるため、ステップＴ９での補正がステップＴ１２での丸め処理の結果に影響を及ぼすのを防止することができる。
【０１５５】
また、図１３のステップＴ１２に示したように、丸め処理を行うことにより、計算精度を更に高めることができる。
【０１５６】
なお、本発明は上記実施形態に限定されることなく、本発明の主旨を逸脱しない範囲において種々の改良及び設計の変更をおこなっても良い。
【０１５７】
例えば、第１実施形態及び第２実施形態においては、本発明に係る計算装置をグラフ関数電卓として説明したが、例えばグラフ描画機能を有しない電卓やパソコン、ＰＤＡ（Personal Digital Assistance）等の電子機器としても良い。
【０１５８】
また、十進演算器７０は電子機器（上記実施形態ではグラフ関数電卓）に内蔵されているものとして説明したが、例えば図１５に示すように、着脱自在に装着可能としてもよい。ここで図１５は、本発明に係る計算装置としての演算システムＳを示したものである。この演算システムＳは、パソコン１００と演算装置２００とを備えている。演算装置２００は十進演算器７０を内蔵しており、パソコン１００のＵＳＢ（Universal Serial Bus）ポートＵ２に端子Ｕ１が差し込まれることで相互にデータ通信可能となる。
【０１５９】
また、ステップＳ１２，Ｔ１２の丸め処理では、計算桁数ｎ＋ｍでの計算結果の各桁の数値と、計算桁数ｎでの計算結果の各桁の数値とを比較することとして説明したが、計算桁数ｎ＋ｍでの計算結果をｎ桁に丸め、計算桁数ｎでの計算結果としても良い。この場合には、計算桁数ｎでの計算や、計算桁数ｎでの計算結果と計算桁数ｎ＋ｍでの計算結果との比較を行う必要がなくなる分、処理を簡略化することができる。
【０１６０】
また、表示部４０が計算桁数ｎでの計算結果を表示することとして説明したが、計算桁数ｎ，ｎ＋ｍの計算結果とを同時に表示することとしても良い。
【図面の簡単な説明】
【０１６１】
【図１】本発明を適用したグラフ関数電卓の概観図である。
【図２】本発明を適用したグラフ関数電卓の内部構成を示すブロック図である。
【図３】ディスプレイの表示画面の１例を示す図である。
【図４】ＲＡＭのデータ構成を示す図である。
【図５】十進演算器の回路構成を示す図である。
【図６】（ａ）は直接／間接アドレス方式を示す図であり、（ｂ）は拡張命令コードＥＸＴを示す図であり、（ｃ）は命令とその動作の一例を示す図である。
【図７】ＲＯＭのデータ構成を示す図である。
【図８】第１の実施形態における計算処理の流れを示すフローチャートである。
【図９】本発明を適用したグラフ関数電卓の内部処理を概念的に示す図である。
【図１０】本発明を適用したグラフ関数電卓の内部処理を概念的に示す図である。
【図１１】本発明を適用したグラフ関数電卓の内部処理を概念的に示す図である。
【図１２】本発明を適用したグラフ関数電卓の内部処理を概念的に示す図である。
【図１３】第２の実施形態における計算処理の流れを示すフローチャートである。
【図１４】本発明を適用したグラフ関数電卓の内部処理を概念的に示す図である。
【図１５】本発明を適用した演算システムの一例を示す図である。
【図１６】従来の計算装置の内部処理を概念的に示す図である。
【図１７】従来の計算装置の内部処理を概念的に示す図である。
【符号の説明】
【０１６２】
１，１Ａ，１Ｂ  グラフ関数電卓（計算装置）
３０            入力部（計算式入力手段，桁数設定手段）
４            ディスプレイ（結果出力手段）
７０          十進演算器（計算手段）
２０          ＣＰＵ（ゼロ補正手段，加減算検知手段、丸め補正手段，
計算部分指定手段，最下位桁補正手段）
４０          表示部（結果出力手段）
５００，５０１  計算プログラム
【図１】
2007272629.tif 000003
【図２】
2007272629.tif 000004
【図３】
2007272629.tif 000005
【図４】
2007272629.tif 000006
【図５】
2007272629.tif 000007
【図６】
2007272629.tif 000008
【図７】
2007272629.tif 000009
【図８】
2007272629.tif 000010
【図９】
2007272629.tif 000011
【図１０】
2007272629.tif 000012
【図１１】
2007272629.tif 000013
【図１２】
2007272629.tif 000014
【図１３】
2007272629.tif 000015
【図１４】
2007272629.tif 000016
【図１５】
2007272629.tif 000017
【図１６】
2007272629.tif 000018
【図１７】
2007272629.tif 000019