64

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

4

13 に答える 13

8

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

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

于 2009-06-19T17:48:05.223 に答える
4

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

弾む城

単核症

于 2009-06-23T09:48:40.900 に答える
4

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

編集codeprojectでの この実装は、わずか 7 倍遅いように見えます...しかし、上記の最適化を使用すると、少数のネイティブ型とほぼ同じように実行できます。

于 2008-10-07T00:33:45.293 に答える
3

性能はよくわかりませんが、IronPython にも BigInteger クラスがあります。これは、Microsoft.Scripting.Math 名前空間にあります。

于 2008-10-07T00:20:52.887 に答える
2

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

于 2008-10-07T00:29:04.617 に答える
2

これは奇妙な提案のように聞こえるかもしれませんが、decimal型をテストして動作速度を確認しましたか?

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

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

于 2008-10-07T00:31:26.360 に答える
2

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

アセンブリでハンドコーディングすると、パフォーマンスが 10 倍以上向上するかどうかさえわかりません。私はそれを最適化する他の方法を探します.数学の問題によっては、より速くするためにできる小さなトリックがある場合があります.

于 2008-10-07T00:23:35.393 に答える
1

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

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

ここには、特にMpir.Netの .Net 用の他の BigInteger オプションもあります。

于 2015-08-25T01:39:19.620 に答える
1

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

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

于 2008-11-08T20:41:33.337 に答える
1

このスレッドの回答を参照してください。利用可能なサードパーティ製の大きな整数ライブラリ/クラスのいずれかを使用するか、ネイティブの BigInteger データ型を含む C# 4.0 を待つ必要があります。

于 2008-11-10T20:28:47.073 に答える