質問

現在、 java.math.BigInteger を借りていますここで説明されているJ#ライブラリから。これまでに大きな整数を扱うためにライブラリを使用したことがないため、長さの数値が ulong であっても、これは10倍程度遅くなります。優れた(できれば無料の)ライブラリがありますか、またはこのレベルのパフォーマンスは正常ですか?

役に立ちましたか?

解決

.NET 4.0以降では、System.Numerics.BigIntegerクラスを使用できます。こちらのドキュメントをご覧ください: http:// msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx

別の代替手段は、 IntX クラスです。

  

IntXは任意の精度です   純粋なC#で記述された整数ライブラリ   2.0 with fast-O(N * log N)-乗算/除算アルゴリズム   実装。それはすべてを提供します   整数の基本操作   加算、乗算、比較、   ビット単位のシフトなど

他のヒント

F#も同梱されています。 Microsoft.FSharp.Math で入手できます。

.NET 4.0の System.Numerics.BigInteger クラスは、Microsoft Researchの Microsoft.SolverFoundation.Common.BigInteger に基づいています。

Solver Foundationの BigInteger クラスは非常に高性能です。どのライセンスでリリースされているかはわかりませんが、こちら(ダウンロードそして、Solver Foundationをインストールし、Microsoft.Solver.Foundation.dllを見つけます。

BigIntsですべての操作を実行し、ネイティブ型でネイティブ型(たとえばint64)よりも小さい結果を返し、大きな配列のみを処理する場合は、実装を最適化できると考えていますオーバーフロー。

編集 この codeprojectの実装は、わずか7倍遅いだけですが...上記の最適化により、少数のネイティブ型とほぼ同じパフォーマンスを得ることができます。

C#でのBigIntegerのいくつかの実装です。 MonoのBigInteger実装を使用しましたが、かなり高速に動作します(CompactFrameworkで使用しました)

弾力がある城

モノ

パフォーマンスについてはわかりませんが、IronPythonにはBigIntegerクラスもあります。 Microsoft.Scripting.Math名前空間にあります。

はい、遅くなります。10倍の差は私が期待するものです。 BigIntは配列を使用して任意の長さを表し、すべての操作は手動で実行する必要があります(CPUで直接実行できるほとんどの数学とは対照的に)

アセンブリでコードを手作業でコーディングすると、10倍以上のパフォーマンスが得られるかどうかさえわかりません。私はそれを最適化する他の方法を探します-時々あなたの数学の問題に応じて、それをより速くするためにあなたがすることができる少しのトリックがあります。

以前の仕事で Biginteger を使用しました。どのようなパフォーマンスが必要なのかわかりません。パフォーマンスを重視する状況では使用しませんでしたが、問題はありませんでした。

これは奇妙な提案のように聞こえるかもしれませんが、 10進数を入力して、動作速度を確認します

10進数の範囲は± 1.0×です。 10 ^− 28から± 7.9× 10 ^ 28なので、まだ十分な大きさではないかもしれませんが、ulongよりも大きいです。

.NET 3.5にはBigIntegerクラスがあるはずでしたが、カットされました

これは役に立ちませんが、.Net 3.5にはBigIntegerクラスがあるはずでした。カットされましたが、PDCで作成されたステートメントからは、.Net 4.0になります。彼らは明らかにそれを最適化するのに多くの時間を費やしたので、パフォーマンスはあなたが今得ているものよりもはるかに良いはずです。

さらに、この質問は本質的にの複製です.NETで非常に大きな整数を表すにはどうすればよいですか?

このスレッド。利用可能なサードパーティのビッグ整数ライブラリ/クラスのいずれかを使用するか、ネイティブBigIntegerデータ型を含むC#4.0を待つ必要があります。

これは非常に有望に見えます。これは、 GMP 上のC#ラッパーです。

http://web.rememberingemil.org/Projects/GnuMpDotNet/GnuMpDotNet.html

.Netには他のBigIntegerオプションもあります Mpir.Net

Math.Gmp.Native も使用できます。私が書いたNugetパッケージ。ソースコードは GitHub で入手でき、ドキュメントはこちら。高度に最適化された任意精度演算として知られる GMP ライブラリのすべての機能を.NETに公開します。ライブラリ。

任意精度の整数は、 mpz_t タイプ。これらの整数に対する操作はすべて、 mpz _ プレフィックスで始まります。たとえば、 mpz_add または mpz_cmp 。ソースコードの例は、各操作について記載されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top