c#-.net中的Int128?

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

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

Adam Tegen asked 2019-10-08T09:44:58Z
10个解决方案
39 votes

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

var i = System.Numerics.BigInteger.Parse("10000000000000000000000000000000");
Larsenal answered 2019-10-08T09:45:09Z
24 votes

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

Rick Sladkey answered 2019-10-08T09:45:35Z
12 votes

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

Jon Skeet answered 2019-10-08T09:46:00Z
2 votes

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

using java.math;

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

}
sbeskur answered 2019-10-08T09:46:25Z
2 votes

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

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

Charles Burns answered 2019-10-08T09:46:58Z
1 votes

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

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

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

Brett Allen answered 2019-10-08T09:47:37Z
1 votes

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

Alexander Logger answered 2019-10-08T09:48:02Z
-2 votes

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

Craig answered 2019-10-08T09:48:26Z
-2 votes

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

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

Joe Basirico answered 2019-10-08T09:48:58Z
-2 votes

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

Antoine Diekmann answered 2019-10-08T09:49:23Z
translate from https://stackoverflow.com:/questions/227731/int128-in-net