大整数在C#大整数在C#(Big integers in C#)

2019-05-08 16:43发布

目前,我借用java.math.BigInteger从J#库,在这里描述 。 从来没有使用过一个库之前,大整数工作,这似乎慢,慢10倍左右,即使是ulong长度的数字。 没有人有任何更好的(最好是免费)库,或者是这个级别的性能是否正常?

Answer 1:

随着.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具有快速 - O(N *日志N) - 乘法/除法的算法实现。 它提供了像加法,乘法,比较,按位整数移位等所有的基本操作



Answer 2:

F#还附带一个。 你可以把它Microsoft.FSharp.Math



Answer 3:

System.Numerics.BigInteger在.NET 4.0中类是基于Microsoft.SolverFoundation.Common.BigInteger来自微软研究院。

求解器基金会BigInteger类看起来非常高性能的。 我不知道该许可证是下发布的,但你可以得到它在这里 (下载和安装求解基金会,并找到Microsoft.Solver.Foundation.dll)。



Answer 4:

我想你可以优化的实现,如果你对将要在本机类型返回结果比原来的类型(例如,Int64的)小,只处理大数组,如果你要溢出BigInts执行所有操作。

编辑这CodeProject上实现 ,似乎慢了7次......但是,随着上述优化,你可以得到它几乎相同执行原生类型小数目。



Answer 5:

以下是C#BigInteger的几种实现。 我用Mono的BigInteger的实施,工程相当快(我在CompactFramework使用它)

充气城堡



Answer 6:

我不知道的性能,但IronPython的也有一个BigInteger类。 它是在Microsoft.Scripting.Math命名空间。



Answer 7:

是的,这将是缓慢的,和10X相差约我期望什么。 BigInt有使用数组表示任意的长度,并且所有的操作都必须手动完成(相,它们可以直接与CPU来完成大多数数学)

我甚至不知道,如果手工编写汇编,它会给你多大的性能提升了10倍以上的,那是相当该死的密切。 我会寻找其他方法来优化它 - 有时取决于你的数学问题有小动作,你可以做,使之更快。



Answer 8:

我用BIGINTEGER在以前的工作。 我不知道什么样的表现,需要你有。 我并没有在性能密集型情况下使用它,但从来没有任何问题了。



Answer 9:

这听起来像是一个奇怪的建议,但你有没有测试的小数类型,看看它是如何工作的快?

十进制范围为±1.0×10 ^ -28到±7.9×10 ^ 28,所以它可能仍然不够大,但它比ULONG大。

这里应该是在.NET中3.5的BigInteger类,但是它得到了削减 。



Answer 10:

这不会帮助你,但应该是在.net 3.5的BigInteger类; 它得到了削减,但是从PDC的发言,这将是在.NET 4.0中。 他们显然已经花了很多时间的优化,所以性能应该比你现在在说什么要好得多。

此外,这个问题本质上是一个重复我怎么能代表.NET非常大的整数?



Answer 11:

请参阅本答案线程 。 您将需要使用可用的第三方大整数库/类之一或等待C#4.0将包括天然BigInteger的数据类型。



Answer 12:

这看起来非常有前途。 这是在C#包装GMP 。

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

还有对于.NET等的BigInteger选择这里特别Mpir.Net



文章来源: Big integers in C#