64 votes

Grands entiers en C #

Actuellement, j'emprunte java.math.BigInteger des bibliothèques J # comme décrit ici . N'ayant jamais utilisé de bibliothèque pour travailler avec de grands nombres entiers auparavant, cela semble lent, de l'ordre de 10 fois plus lent, même pour les nombres de longueur ulong . Quelqu'un a-t-il de meilleures bibliothèques (de préférence gratuites) ou ce niveau de performance est-il normal?

66voto

Davorin Points 958

MS va introduire la classe System.Numerics.BigInteger dans .NET 4.0

Jusque-là, regardez la classe IntX .

IntX est une bibliothèque d'entiers de précision arbitraire écrite en C # 2.0 pur avec la mise en œuvre d'algorithmes rapides - O (N * log N) - multiplication / division. Il fournit toutes les opérations de base sur les entiers comme l’addition, la multiplication, la comparaison, le décalage au niveau du bit, etc.

9voto

Steve Points 4402

F# également livré avec un. Vous pouvez l'obtenir à Microsoft.FSharp.Math .

8voto

Rasmus Faber Points 24195

La classe System.Numerics.BigInteger dans .NET 4.0 est basée sur Microsoft.SolverFoundation.Common.BigInteger de Microsoft Research.

La classe BigInteger de la fondation Solver semble très performante. Je ne suis pas sûr de la licence sous laquelle il est publié, mais vous pouvez l'obtenir ici (téléchargez et installez Solver Foundation et trouvez le fichier Microsoft.Solver.Foundation.dll).

4voto

Vadym Stetsiak Points 1454

Voici plusieurs implémentations de BigInteger en C #. J'ai utilisé l'implémentation BigInteger de Mono, fonctionne assez rapidement (je l'ai utilisé dans CompactFramework)

Château gonflable

Mono

4voto

Sam Saffron Points 56236

Je pense que vous pourriez optimiser la mise en œuvre si vous effectuez toutes les opérations sur BigInts qui vont retourner des résultats plus petit qu'un type natif (par exemple. int64) sur les types natifs et ne portent que sur le grand tableau, si vous allez à débordement.

modifier Cette mise en œuvre sur codeproject, semble seulement 7 fois plus lent ... Mais avec le dessus de l'optimisation, vous pouvez l'obtenir pour presque identique pour les types natifs pour les petits nombres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X