86

CまたはC++で適切な任意精度の数学ライブラリを探しています。アドバイスや提案をお願いします。

主な要件:

  1. 任意の大きさの整数を処理する必要があります。私の主な関心は整数です。恣意的に大きいという言葉が何を意味するのかわからない場合は、100000のようなものを想像してみてください。(100000の階乗)。

  2. ライブラリの初期化またはオブジェクトの作成中に精度を指定する必要はありません。精度は、システムの利用可能なリソースによってのみ制約される必要があります。

  3. プラットフォームの能力をフルに活用し、「小さな」数をネイティブに処理する必要があります。つまり、64ビットプラットフォームでは、(2 ^ 33 + 2 ^ 32)の計算には使用可能な64ビットCPU命令を使用する必要があります。ライブラリは、同じプラットフォームで(2 ^ 66 + 2 ^ 65)を使用する場合と同じ方法でこれを計算するべきではありません。

  4. 加算( )、減算()、乗算()、整数除算()、剰余()、累乗()、増分()、減分()、GCD、階乗、およびその他の一般的な整数算術計算を効率的に処理する必要があります。整数の結果を生成しない平方根や対数などの関数を処理する機能はプラスです。記号計算を処理する機能はさらに優れています。+-*/%**++--

これが私がこれまでに見つけたものです:

  1. JavaBigIntegerおよびBigDecimalクラス:私はこれまでこれらを使用してきました。ソースコードを読みましたが、その下の計算がわかりません。それは私が学んだことのない理論やアルゴリズムに基づいているのかもしれません。

  2. 組み込み整数型またはbcPythonRubyHaskellLispErlangOCamlPHP、その他の言語のコアライブラリ:これらのいくつかを使用しましたが、どのライブラリを使用しているかわかりません。彼らが使用している実装の種類。

私がすでに知っていること:

  1. char10進数字と10進文字列に使用char*し、-loopを使用して数字の計算を行いますfor

  2. int(または、、long intまたはlong long)を基本的な「単位」として使用し、そのタイプの配列を任意の長整数として使用し、for-loopを使用して要素の計算を行います。

  3. 整数型を使用して、10進数(または数桁)をBCD(2進化10進数)として格納します。

  4. ブースの乗算アルゴリズム

私が知らないこと:

  1. 単純な方法を使用せずに、上記のバイナリ配列を10進数で印刷します。単純な方法の例:(1)ビットを最低から最高に追加します:1、2、4、8、16、32、…(2)char*上記の-文字列を使用して中間の小数の結果を格納します)。

私が感謝すること:

  1. GMPMPFRdecNumber(またはあなたの意見で良い他のライブラリ)の良い比較。

  2. 私が読むべき本や記事に関する良い提案。たとえば、ナイーブでない2進化10進変換アルゴリズムがどのように機能するかを図で示したものが適切です。DouglasW.Jonesによる記事「<strong>制限付き精度での2進数から10進数への変換」は良い記事の例です。

  3. 一般的なヘルプ。

(または、、または)を使用するとこの問題を簡単に解決できると思われる場合は、この質問に答えないでください。そう思うと、問題の問題を理解できません。doublelong doublelong long double

4

5 に答える 5

27

GMPは人気のある選択肢です。Squeak Smalltalkには非常に優れたライブラリがありますが、Smalltalkで記述されています。

あなたは関連する本や記事を求めました。bignumのトリッキーな部分は、筆算です。パー・ブリンチ・ハンセンの論文「Multiple-Length Division Revisited:A TouroftheMinefield」をお勧めします。

于 2010-04-04T04:48:21.547 に答える
14

全体として、彼の最速の汎用任意精度ライブラリはGMPです。浮動小数点値を操作する場合は、MPFRライブラリを参照してください。MPFRはGMPに基づいています。

他の言語でのネイティブの任意精度のサポートに関して、Pythonは、ライセンス、コードサイズ、およびコードの移植性の理由から、独自の実装を使用します。GMPYモジュールを使用すると、PythonでGMPライブラリにアクセスできます

于 2010-04-03T07:56:21.580 に答える
9

TTMathを参照してください。これは、個人および商用で無料で使用できる小さなテンプレート化されたヘッダー専用ライブラリです。

于 2012-03-12T09:22:40.760 に答える
8

私自身、任意精度の算術ライブラリを比較したことはありませんが、GMPにほぼ均一に定着しているように見える人もいます。価値のあることとして、GHCHaskellとGNUGuileスキームの任意精度の整数は両方ともGMPを使用して実装されており、言語シュートアウトでのpidigitsベンチマークの最速の実装はGMPに基づいています。

于 2010-04-02T23:04:36.110 に答える
5

パリはどうですか?これはトップGMPに基づいて構築されており、これまでに必要となる数論演算(および多くの記号計算関連のもの)に関する他のすべての優れた機能を提供します。

于 2010-11-10T17:31:24.263 に答える