0

JavaScript のようなプログラミング言語で値を計算するために使用できるように、 say10^-100からまでの非常に大きな数値と非常に小さな数値を効率的に保存するにはどうすればよいでしょうか。10^100

JavaScript は10^100として保存し1e+101ますが、データベースでそれを行う方法はありますか? 多くの場合、数値はそれほど大きくありませんが、などのデータで計算を行いたい10^-34 * 2^16ので、データベースはこれらを数値として保存する必要があります...

これはどのように作動しますか?計算を実行できるように、このスケールの数値をどのように保存しますか?

「データベース」ということで、一般的に考えています。現在、MongoDB と Neo4j をいじっています。

4

3 に答える 3

4

データベース自体は、ネイティブの数値形式で任意のサイズの数値をサポートしていません。数値型の一般的な上限は通常 8 バイトですが、これは googol にはほど遠いものです。

数値を文字列 (最も効率が低く、操作が簡単で、必要に応じて正確にすることができます)、任意の長さのバイト配列 (より効率的で、操作が難しく、それでも任意の精度) として格納する必要があります。または科学的表記法 (最も効率的で、操作が難しく、精度が限られています)。

残念ながら、最初の 2 つは、有効な値の範囲をサポートできるネイティブの数値型が存在しないため、サーバー側の計算を行う可能性を排除します。すべての計算は、適切な数値型を使用してクライアント側で行う必要があります。

于 2012-06-05T03:05:50.337 に答える
2

ダブルタイプで使えます。

MySQL DOUBLE[(M,D)]

通常サイズ (倍精度) の浮動小数点数。許容値は -1.7976931348623157E+308 ~ -2.2250738585072014E-308、0、および 2.2250738585072014E-308 ~ 1.7976931348623157E+308 です。これらは、IEEE 規格に基づく理論上の制限です。ハードウェアまたはオペレーティング システムによっては、実際の範囲がわずかに小さくなる場合があります。

于 2012-06-05T03:07:17.930 に答える
2

私があなたなら、指数から数値を分離します。私は個人的に MongoDB や Neo4j の経験はありませんが、MySQL では (似たような用語があるはずです)、プログラムで必要な精度 (または一意の数字の数)、および長さ 3 の別の VARCHAR 列 (最大指数 999)。必要に応じて値をいじることができますが、私が考えることができるのはそれだけです。より柔軟なサイズ値が必要な場合は、データベースを使用するのではなく、PHP を使用してサーバーのファイル システムに数値を格納します。

于 2012-06-05T03:03:59.540 に答える