重複の可能性:
多数のクラスの最も効率的な実装
2^150000 を計算する必要があるとします。明らかに、その数値は int、float、または double のサイズを超えます。通常の数学関数を使用できるが、基本的な数値型を超えるデータ型を作成するにはどうすればよいですか?
これが「使用する言語に依存する」種類の取引である場合。C#と言います。
重複の可能性:
多数のクラスの最も効率的な実装
2^150000 を計算する必要があるとします。明らかに、その数値は int、float、または double のサイズを超えます。通常の数学関数を使用できるが、基本的な数値型を超えるデータ型を作成するにはどうすればよいですか?
これが「使用する言語に依存する」種類の取引である場合。C#と言います。
C# が固定化されておらず、箱から出してすぐに動作するものが必要な場合は、いくつかのオプションがあります。私が最もよく知っているのはPython ですが、Scheme や Ruby などの言語も多数をサポートしていると思います。
パイソン: 2**150000
. 約 1 秒後に結果を出力します。
無料の数学ソフトウェアが必要な場合は、Maxima または Sage を参照してください。
また、測定単位を処理するネイティブ機能を備えた言語である Frink の使用を検討することもできます。難なく 2^150000 を計算し、分数 (1/3+2/5 --> 11/15 など) を処理し、3 メートル + 2 インチ --> 3.0508 m を計算し、完全なプログラミング言語です。
フリンク - Copyright 2000-2008 Alan Eliasen, eliasen@mindspring.com http://futureboy.us/frinkdocs/
いくつかの言語には、任意の大きな数のサポートが組み込まれています。たとえば、Mathematica を使用できます。Mathematica であなたの例を試してみましたが、結果は 45,155 桁です。bc
Unix マシンで同じ例を試しました。bc は拡張精度をサポートしていますが、拡張精度はサポートしていません。それは例に爆撃しました。
Lisp はあなたの友達です。デフォルトの倍長整数。
任意に大きな数を持たない言語を使用するのは非常にイライラします。ほとんどの数で足し算などの通常の演算子を使用できるのに、そのサイズのために BigInt インスタンスのメソッド呼び出しに切り替える必要があるのは無意味に思えます。
多くの言語には、より完全な数値タワーがあり、必要に応じてシームレスに強制します。たとえば、Allegro Common Lisp は、(expt 2 150000) の 45,155 桁すべてを 1 ミリ秒で評価して出力します。
cl-user(2): (time (expt 2 150000))
; cpu time (non-gc) 0 msec user, 0 msec system
; cpu time (gc) 0 msec user, 0 msec system
; cpu time (total) 0 msec user, 0 msec system
; real time 1 msec
; space allocation:
; 2 cons cells, 18,784 other bytes, 0 static bytes
任意精度の計算機である calc と呼ばれる C の製品があります。研究者として働いていたときに一度使用しましたが、かなり簡単に使用できることがわかりました...
http://sourceforge.net/projects/calc/
困難な計算や長い計算のためにプログラムすることができ、コマンド ラインから引数を受け取ることができます。対話モードでは、一度に 1 つのコマンドを受け入れ、回答を表示します。
通常、コマンドは次のような単純な式です。
3 * (4 + 1)
そして calc は以下を表示します:
15
Calc は、算術演算子 +、-、/、*、および ^ (べき乗)、% (剰余)、および // (整数除算) を実行します。
例えば:
3 * 19 ^ 43 - 1
生成されます:
29075426613099201338473141505176993450849249622191102976
計算値は非常に大きくなる可能性があります。例えば:
2 ^ 23209 - 1
印刷されます:
402874115778988778181873329071 ... loads of digits ... 3779264511
お役に立てれば...
Python には bignum ライブラリがあります。別の言語で bignum ライブラリを実装する必要がある場合は、少なくとも Python のライブラリを参考にして作業を検証できます。bignum には、何を探しているのかわからない場合、すぐにはわからないいくつかの実装上の落とし穴があることに注意してください。
C# はわかりませんが、Ruby プログラミング言語には BigDemical クラスがあり、サイズを無制限にできるようです。