4

以下を行うための最良の方法は何でしょうか。

非常に長い数値を入力します。たとえば、500,000 桁の長さを科学的表記法に含めずに入力します。+2などのように、それを使って数学を行うことができますか?

前もって感謝します。

編集: 500,000 桁の正の整数です。

4

14 に答える 14

13

PythonJavaにはネイティブ サポートがあり、C++C.NETなどのライブラリが存在します。

于 2009-10-31T01:51:04.237 に答える
11

Erlang が無制限のサイズの int 演算をサポートしていることは知っています。

于 2009-10-31T01:49:04.693 に答える
6

Pythonはそれ自体でかなり優れていますが、gmpy(他の人が言及したGMPライブラリに橋渡しするか、代わりにMPIRに似たものに橋渡しします[[作業中;-)]])。検討:

$ python -mtimeit -s'x=int("1"*9999); y=int("2"*9999)' 'x*y'
100 loops, best of 3: 6.46 msec per loop

つまり、純粋な Python では、2 つの 10K 桁の整数を乗算するのに 6.5 ミリ秒ほどかかります。と...:

$ python -mtimeit -s'from gmpy import mpz; x=mpz("1"*9999); y=mpz("2"*9999)' 'x*y'
1000 loops, best of 3: 326 usec per loop

... gmpy が手元にあれば、操作は約 20 倍速くなります。桁数が数千ではなく数百の場合は、さらに極端です。

$ python -mtimeit -s'x=int("1"*199999); y=int("2"*199999)' 'x*y'
10 loops, best of 3: 675 msec per loop

$ python -mtimeit -s'from gmpy import mpz; x=mpz("1"*199999); y=mpz("2"*199999)' 'x*y'
100 loops, best of 3: 17.8 msec per loop

したがって、10k 桁ではなく 200k 桁の場合、gmpy の速度の利点は約 38 倍になります。

この規模の整数を日常的に処理する必要がある場合、Python + gmpy は実際に実行可能なソリューションです (もちろん、私は偏見があります。なぜなら、私は過去数年間 gmpy を作成して世話をしていたからです ♥ Python (ねえ、私のライセンス) plateは P♥thon です!-)私の趣味の 1 つ (組み合わせ算術) ではこのような数をかなり頻繁に処理する必要があります;-)

于 2009-10-31T03:38:05.533 に答える
6

Python は、特別なライブラリを使用せずにこれを行います。Unix システムの 'bc' (電卓を装った完全なプログラミング言語) も同様です。

于 2009-10-31T01:53:32.053 に答える
4

Mathematica ではそのような計算ができ、完全なプログラムを書くことができます。

それ以外の場合、求めているのは、Python や Java などの別のプログラミング言語の組み込み機能を拡張するための「ライブラリ」です。

Python の場合、decimal モジュールを使用すると、数学演算が実行される精度を指定できます。

于 2009-10-31T01:47:12.543 に答える
4

Haskell (GHC を使用する場合) には、任意の長さの整数の組み込みサポートもあります。文字列に変換された数値の長さを示すスニペットを次に示します。

Prelude> length $ show $ 10
2
Prelude> length $ show $ 1 + 2^2000000
602060
Prelude> let x = 2^200000
Prelude> let y = 2^200000 + 5
Prelude> y - x
5

または2^200000、インタラクティブ コンソールに入力して、60 万以上の文字がすべて出力されるまで数分待つこともできます。この方法は、実証するのが少し簡単だと思いました。

于 2009-10-31T01:51:49.353 に答える
4

Common Lisp には、任意の大きな数に対するサポートも組み込まれています...

于 2009-10-31T02:32:30.253 に答える
3

探しているのは必ずしも言語ではなく、任意精度のライブラリです。

GMP は C/C++ での高速な実装であり、大きな整数を処理するスクリプト言語はおそらくそのようなものを使用するでしょう。

于 2009-10-31T02:18:10.273 に答える
3

Perlbignumにはそのようなことを行うためのモジュールがあり、Python はそれをネイティブにサポートしています。

于 2009-10-31T01:48:58.703 に答える
3

Perl, Python, Ruby, and Java can all do that. External libraries exist for everything else.

I rather like Ruby and Python because they automatically switch from Fixnum to Bignum. (Python: int to long.)

于 2009-10-31T01:51:52.830 に答える
1

MIT/GNU スキームは、任意の大きな数をサポートしています。

于 2009-10-31T02:39:49.837 に答える
1

多くの関数型言語は、任意精度の数値をネイティブでサポートしています。いくつかはすでにここで言及されていますが、完全を期すために繰り返します。

于 2009-10-31T03:47:17.300 に答える
1

C または C++ では、 GMP (Gnu Multi-Precision ライブラリ)を使用できます。

Perl では、 bignum モジュールを使用できます。

于 2009-10-31T01:52:36.060 に答える
0

Pythonはこれに非常に適していると思います。

于 2009-10-31T14:40:13.290 に答える