我需要做一些大整数数学运算。是否有任何类或结构代表一个128位整数并实现所有常用运算符?
顺便说一句,我意识到小数可以用来表示一个96位的int。
答案 0 :(得分:39)
它位于System.Numerics 。 “BigInteger类型是一个不可变类型,表示一个任意大的整数,其理论上的值没有上限或下限。”
var i = System.Numerics.BigInteger.Parse("10000000000000000000000000000000");
答案 1 :(得分:24)
虽然BigInteger
是大多数应用程序的最佳解决方案,但如果您有性能关键的数值计算,则可以在Dirichlet.Numerics库中使用完整的Int128
和UInt128
实现。如果Int64
和UInt64
太小但BigInteger
太慢,则这些类型非常有用。
答案 2 :(得分:12)
不,.NET< = 3.5中没有任何内容。我希望/期望BigInteger将在.NET 4.0中返回。 (那是cut from .NET 3.5。)
答案 3 :(得分:2)
如果您不介意引用J#库(默认情况下包含在VS中的vjslib.dll),那么已经在.NET中实现了BigInteger
using java.math;
public static void Main(){
BigInteger biggy = new BigInteger(....)
}
答案 4 :(得分:2)
BigInteger现在是C#的标准组成部分,也是.NET 4.0中的朋友。请参阅:Gunnar Peipman's ASP.NET blog。 请注意,CPU通常可以更加快速且恒定地使用普通整数,尤其是在使用通常的数学运算符(+, - ,/,...)时,因为这些运算符通常直接映射到单个CPU指令。
使用BigInteger,即使是最基本的数学运算,对运行时随数字大小而变化的方法的函数调用要慢得多。这是因为BigInteger实现了任意精度算术,这增加了相当多但必要的开销。 好处是BigIntegers不限于64位甚至128位,而是通过可用的系统内存(或大约2 ^ 64位的精度,以先到者为准)。 阅读here。
答案 5 :(得分:1)
C#PCL库,用于计算大数字,如Int128和Int256。 https://github.com/everbytes/BigMath
答案 6 :(得分:1)
GUID由.NET框架中的128位整数支持;虽然它没有任何典型的整数类型方法。
我之前为GUID编写了一个处理程序,将其视为一个128位整数,但这适用于我工作了大约8年的公司。我无法再访问源代码。
因此,如果您需要128位整数的原生支持,并且不想因任何原因依赖BigInteger,那么您可能会破解GUID以服务于您的目的。
答案 7 :(得分:-2)
我相信Mono有一个BigInteger实现,你应该能够找到源代码。
答案 8 :(得分:-2)
这是一个来自.net的大整数的实现。
答案 9 :(得分:-2)
这是.NET中Int128的一个实现: https://int128.codeplex.com/