4

数千万桁の数値を処理し、このレベルで計算できる方法を探しています。Java と少しの Python を使用できます。したがって、これらのいずれかのライブラリは便利ですが、これらの種類の数値を処理できるプログラムも機能します。誰か提案はありますか?

ありがとう

4

5 に答える 5

5

Java の場合は、組み込みクラスBigIntegerBigDecimal. BigInteger数値は、使用可能なメモリによってサイズが制限されます。小数点の右側に最大 2 32BigDecimal桁の任意の大きな 10 進数を表すことができます(実際には、使用可能なメモリによっても制限されます)。

これらは両方とも、かなり基本的な数学演算に限定されています。(算術、整数累乗など。ルート、ログなどはありません。) これ以上のものが必要な場合は、NIST の Java Numerics ページにあるライブラリのリストを参照してください。( Apfloat パッケージは、任意精度の超越関数と複雑な数学をサポートしています。)

于 2012-11-22T15:27:31.963 に答える
5

Python は、ライブラリを必要とせずに大きな数を処理できます。

>>> 100 ** 100
1000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000L

他の人が示唆しているように、速度を上げたい場合はgmpyを使用することをお勧めします。


Java ではBigIntegerを使用できます。

于 2012-11-22T15:27:32.250 に答える
2

Pythonの場合、 GNUBignumライブラリのPythonラッパーであるgmpyをお勧めします。Pythonは理論的には任意の大きさの整数(メモリによってのみ制限される)を処理し、数千桁程度の数値には問題ありませんが、100万桁の整数の処理にはあまり適していません。高速乗算、桁変換、およびその他の標準操作に最先端のアルゴリズムを使用していません。 対照的に、そのような規模の数値を処理するように設計されています。gmpy

いくつかのサンプルタイミングを次に示します。これは、数千桁であっても、gmpyPythonの組み込みのlongよりも大幅に高速であることを示しています。

$ python -m timeit -s "from gmpy import mpz" "str(mpz(10)**10000)"
1000 loops, best of 3: 575 usec per loop
$ python -m timeit "str(10**10000)"
100 loops, best of 3: 11.8 msec per loop

余談ですが、ある時点で、Pythonコア開発者の1人が、Pythonの長整数実装をGMPを直接使用する実装に置き換えようとしました。日常の非整数のユースケースでは、Pythonの速度が実際に低下することが判明しました。詳細については、 http://bugs.python.org/issue1814を参照してください。

于 2012-11-22T16:43:10.187 に答える
1

BigDecimal で十分です。ただし、 JScienceを見ることができます。

于 2012-11-22T15:30:49.920 に答える
0

どのような数学演算が必要ですか?

Java はすでに java.math.BigDecimal や java.math.BigInteger などの基本的な処理 (加算、乗算など) に使用できるクラスを提供しています。

于 2012-11-22T15:31:36.120 に答える