目前,我借用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