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

顺便说一句,我意识到小数可以用来表示一个96位的int。

有帮助吗?

解决方案

系统中。 NUMERICS 即可。 <!>“BigInteger类型是一个不可变类型,表示一个任意大的整数,其理论上的值没有上限或下限。<!>

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

其他提示

虽然BigInteger是大多数应用程序的最佳解决方案,但如果您有性能关键的数值计算,则可以在我的Int128和UInt128实现/ ricksladkey / dirichlet-numerics“> Dirichlet.Numerics 库。 Int64UInt64太小但<=>太慢时,这些类型很有用。

不,.NET中没有任何东西<!> lt; = 3.5。我希望/期待 BigInteger 将在.NET 4.0中回归。 (这是切断.NET 3.5 。)

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

using java.math;

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

}

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

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

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

我之前为GUID编写了一个处理程序,将其视为一个128位整数,但这适用于我工作了大约8年的公司。我无法再访问源代码。

因此,如果您需要128位整数的原生支持,并且不想因任何原因依赖BigInteger,那么您可能会破解GUID以服务于您的目的。

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

我相信Mono有一个BigInteger实现,你应该能够找到源代码。

这是一个来自.net的大整数的实现。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top