关于.Net中的c#:Int128?

Int128 in .Net?

我需要做一些大整数数学。 是否存在表示128位整数并实现所有常用运算符的类或结构?

顺便说一句,我意识到十进制可以用来表示一个96位的整数。


在System.Numerics中。" BigInteger类型是不可变的类型,表示任意大的整数,其理论上的值没有上限或下限。"

1
var i = System.Numerics.BigInteger.Parse("10000000000000000000000000000000");


虽然BigInteger是大多数应用程序的最佳解决方案,但是如果您具有对性能至关重要的数值计算,则可以在我的Dirichlet.Numerics库中使用完整的Int128UInt128实现。如果Int64UInt64太小而BigInteger太慢,则这些类型很有用。


不,.NET <= 3.5中没有任何内容。我希望/期望BigInteger将在.NET 4.0中返回它。 (它是从.NET 3.5中删除的。)


BigInteger现在是.NET 4.0中C#和朋友的标准部分。请参阅:Gunnar Peipman的ASP.NET博客。
请注意,CPU通常可以更快,更恒定的速度处理普通整数,尤其是在使用常规数学运算符(+,-,/,...)时,因为这些运算符通常直接映射到单个CPU指令。

使用BigInteger,即使是最基本的数学运算,对方法的运行速度也要慢得多,这些方法的运行时间随数字的大小而变化。这是因为BigInteger实现了任意精度算法,这增加了可观但必要的开销。
这样做的好处是BigIntegers不限于64位甚至128位,而是由可用的系统内存(或大约2 ^ 64位的精度,以先到者为准)。
在这里阅读。


如果您不介意引用J#库(默认情况下VS包含vjslib.dll),则.NET中已经存在BigInteger并已实现

1
2
3
4
5
6
using java.math;

public static void Main(){
    BigInteger biggy = new BigInteger(....)

}

C#PCL库用于大量计算,例如Int128和Int256。
https://github.com/everbytes/BigMath


GUID由.NET框架中的128位整数支持;尽管它没有任何典型的整数类型方法。

之前我已经为GUID编写了处理程序,将其视为128位整数,但这是给我工作大约8年的公司使用的。我不再可以访问源代码。

因此,如果您需要对128位整数的本机支持,并且由于某种原因不想依赖BigInteger,则可能会破解GUID来满足您的目的。


这是.NET中Int128的实现:
https://int128.codeplex.com/


这是来自.net的big integer的实现。

http://msdn.microsoft.com/en-us/magazine/cc163696.aspx


我相信Mono具有BigInteger实现,您应该能够跟踪其来源。