对于.NET 中的128位数字,我应该使用哪种类型?

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

顺便说一下,我认识到 decimal可以用来表示一个96位的 int。

63910 次浏览

没有,里面什么都没有。NET < = 3.5.我希望/期望 BigInteger将在。NET 4.0.(是 来自.NET 3.5。)

我相信 Mono 有一个 BigInteger 实现,您应该能够追踪其源代码。

就在这里。“ BigInteger 类型是一个不可变类型,它表示一个任意大的整数,其值在理论上没有上限或下限。”

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

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

using java.math;


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


}

BigInteger现在是 C # 和.NET 4.0中的朋友的标准部分。

注意,CPU 处理普通整数的速度通常要快得多,而且处理的时间是常数,特别是在使用通常的数学运算符(+ ,-,/,...)时,因为这些运算符通常直接映射到单个 CPU 指令。

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

用于大数值计算(如 Int128和 Int256)的 C # PCL 库。 Https://github.com/lessneek/bigmath

虽然 BigInteger是大多数应用程序的最佳解决方案,但如果您有性能关键的数值计算,则可以在我的 狄利克雷,数字库中使用完整的 Int128UInt128实现。如果 Int64UInt64太小而 BigInteger太慢,这些类型是有用的。

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

我曾经为 GUID 编写过一个处理程序,把它当作一个128位整数来处理,但这是为一家我在大约8年前工作过的公司编写的。我再也无法访问源代码了。

因此,如果您需要对128位整数的本机支持,并且由于某种原因不想依赖 BigInteger,那么您可以修改 GUID 来满足您的需求。

System.Int128 System.UInt128从.NET Core 7.0 Preview 5开始就可用了

它们是在 添加对 Int128和 UInt128数据类型的支持中实现的

我不知道为什么他们不在 .NET 7预览5 公告但在即将到来的。NET 7预览版6的声明也会有 ABC0和 UInt128Converter的新类型在预览版5

但是它们还没有 C # 支持,就像 System.Half一样,所以您必须显式地使用 Int128,而不是使用本机 C # 关键字