(57)【要約】【課題】コンピュータにおける数値演算の桁落ちを、ソフトウェア上で解決する。要求された計算に対して、大きな桁の数値を扱う際にも正確な計算を行う。【解決手段】数値として認識できる文字列データを、そのまま計算データの対象とする。【選択図】なし【特許請求の範囲】
【請求項１】
人が数値として解釈できる、コンピュータ内部で保持する文字列データを、そのまま計算対象の数値として扱い演算する手段。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータの数値計算において、扱う数値の桁数における制限を廃し、桁落ちを防ぐものである。
【０００２】
【従来の技術】
従来のコンピュータにおける数値計算は、中央演算処理装置もしくは数値演算プロセッサ等におけるハードウェアが担当し、ソフトウェアはハードウェアに計算項目を渡し、その演算結果を受け取ることで実現している。
【０００３】
ほとんどのコンピュータでは数値の扱いをＩＥＥＥ（Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃ  Ｅｎｇｉｎｅｅｒｓ）等の国際規格に準拠している。
【０００４】
【発明が解決しようとする課題】
ハードウェアによる演算は高速かつ、正確な内容が期待できるが、その数値演算のためのハードウェアの設計段階で数値の桁数に制限が設けられるため、桁数の大きな演算を行う場合に桁落ちが生じる。
【０００５】
コンピュータ内で、計算の対象となる数値データ、もしくは計算途中に算出された数値データに一度桁落ちが生じると、その計算結果における数値の信頼性は大きく損なわれる。
【０００６】
本発明は大きな桁を扱う数値データで、四則演算のうち加算、減算、乗算においては桁落ちの発生しない手法を示す事、除算においては任意の算出桁数を指定することにより、納得のいく計算結果を示す事を最終的な目的としている。
【０００７】
【課題を解決するための手段】
上記目的を達成するために本発明で行う数値計算は、コンピュータ内部で数値データを文字列で保持し、計算の対象とする。
【０００８】
計算結果を格納する文字列の大きさは、計算項目の桁数と演算子を参照する事で予想が可能である。
【０００９】
計算を行おうとするコンピュータのオペレーティングシステムの設計思想が、ＵＮＩＸ（登録商標）に準じたもの、もしくはＵＮＩＸ（登録商標）の機能を完全に用意しているものである場合は、プログラムは実行中にコンピュータの記憶装置（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ、以下メモリ）の空きエリアに任意の大きさの配列を要求できる。
【００１０】
最近のオペレーティングシステムは、ほとんどがプログラムからの要求に対してメモリの臨時割り当て（メモリーアロケーション）が可能であり、割り当ての大きさの制限がコンピュータとオペレーティングシステムの固有の性能に依存する状態として存在するものの、本発明の目的を満たす仕様を保持している。
【００１１】
計算結果の格納する文字列は、臨時に割り当てられた文字列データ（単体では１バイト）へ格納、最終的には臨時ではないエリアに移せばよい。
【００１２】
２つの文字列データに対しての加減乗除計算のアルゴリズムは、小学校課程で習得する方法で十分対応できる。
【００１３】
人がコンピュータに要求する計算内容の記述は、従来の技術で対応可能である。
【００１４】
例えば、「９７＋３４」という文字列の記述をコンピュータに与えれば、「９７」と「３４」は数値として解釈が可能であり、間にある「＋」演算子は左右に並ぶ２つの数値を加算するための記号と解釈可能であり、また式そのものの意味を理解するアルゴリズムは既に存在する。
【００１５】
【発明の実施の形態】
本発明は、本明細書「請求項１」で「文字列をそのまま数値として扱う手段」としているが、実際にはこの理論をプログラム化して、実際にコンピュータ上で稼動可能とするアプリケーションプログラムを作成することが大きな課題となる。
【００１６】
基本的に作成する必要のあるアプリケーションプログラムは、人からコンピュータに与える式のデータを解釈するプログラムと、解釈された式の内容を加減乗除に振り分け演算を行うための４つのプログラム、計５つとなり、計算の機能をさらに拡張すればそれ以上の数となる。
【００１７】
式のデータの解釈とは、「１２×（３４＋５６）」の文字列を、３４と５６を先に加算して、その演算結果と１２を乗算する等、計算の優先順位や手順を式から読み取ることで、この技術は上記にもあるとおり、既存している。
【００１８】
加減乗除の４プログラムのうち、加減乗算の３プログラムは、２つの計算対象となる数値データを文字列（ポインタ）として設置し、演算結果を受け取る文字列データエリア（ポインタ）を用意、設置し、除算のプログラムについては、さらに小数点以下の必要とする桁数を指定する項目を設置することが必要となる。
【００１９】
大きすぎる演算結果には、丸め等の桁処理を行う必要があるが、桁処理のためのプログラムを用意するかどうかはプログラム作成者の判断、もしくは演算の実行者の判断による。
【００２０】
【実施例】
本発明の加算の例として、「９７＋３４」の計算を以下に記述する。
【００２１】
このとき、式中の数値「９７」は、２バイトの文字列であり、終端記号が存在すれば、３バイトの文字列である。
【００２２】
文字列データであるゆえに、このときの数値「９７」は、コンピュータは内部データとして「３９３７」（１６進数）と記憶している。
【００２３】
さらに、式中の数値「３４」も２バイトもしくは３バイトであり、記号「＋」は１バイトもしくは２バイトの文字列であり、コンピュータの内部データではそれぞれ「３３３４」（１６進数）「２Ｂ」（１６進数）と記憶している。
【００２４】
2004178539.tif 000002
【００２５】
上記▲１▼と▲２▼は文字列データで、演算の対象であり、加算することが目的である。
【００２６】
▲３▼は桁上がりのために用意されたメモリの臨時割り当て文字列データエリアで、演算子が「＋」と既知であるため必要とする大きさは予想できる。
【００２７】
▲４▼は計算結果が格納される文字列データエリアで、計算結果の桁数は予想できるため、メモリの臨時割り当ては可能である。
【００２８】
▲４▼の計算結果は、▲１▼▲２▼のそれぞれの桁を加算し、▲３▼のエリアに桁上がりを記述し、実際には▲１▼▲２▼▲３▼のそれぞれの桁を加算した結果の一桁目を表示している。
【００２９】
このときの計算手段は、それぞれ縦１桁の数値だけを対象として行うため、文字型から整数型へ変換して計算し、必要な結果内容を文字型に変換して▲４▼のエリアに置いていく方法も考えられる。
【００３０】
▲４▼の計算結果は、ＩＥＥＥ規格等への変換は可能であるが、計算結果の桁が大きすぎる場合は、変換の際に桁落ちが発生する可能性がある。
【００３１】
【発明の効果】
本発明は、桁落ちによる計算の誤差の問題を解決する。
【００３２】
例えば、直径１億光年の銀河の面積は何平方センチメートルか？等の要求に応えることができるため、宇宙開発にも応用でき、宇宙からの地球の地形図作成にも効果が期待できる。
【００３３】
また、本発明は、前述したＩＥＥＥ規格等の国際規格に準じないわけではなく、既存の技術も利用可能である。
【００３４】
例えば、既存の方法で三角関数の実数値をＩＥＥＥ規格等で得て、その数値を文字列に変換し、本発明内の計算手順内に組み込めば、少なくともＩＥＥＥ規格での技術で算出される数値データよりは信頼性の高い計算結果データを得ることが可能となる。
【００３５】
ＲＳ２３２Ｃ等を介して周辺装置に数値データを転送するときには、ＩＥＥＥ規格等の数値データから文字列データに変換して転送されるケースも見られるため、周辺機器が受け取る数値とすることはそう困難ではないことが予想できる。