作者:个性2402852463 | 2023-09-03 17:37
我需要做一些大整数数学.是否有任何类或结构代表一个128位整数并实现所有常用的运算符?
顺便说一句,我意识到十进制可以用来表示一个96位的int.
1> Larsenal..:
它在System.Numerics中."BigInteger类型是一个不可变类型,表示一个任意大的整数,其理论上的值没有上限或下限."
var i = System.Numerics.BigInteger.Parse("10000000000000000000000000000000");
好吧,所以BigInteger满足了这个需求,但它不是Int128类型,它进行堆分配(很多'em,每个操作)并且操作32位字,这样的开销就有这样的开销,而它支持任意范围如果我知道我真的需要Int128类型,我不会用它.我认为人们已经使用较小的整数来模拟一个较大的整数一段时间(由于各种硬件限制),并且不应该很难找到合适的C代码并进行调整.我的观点是,BigInteger是一般案例的解决方案,而不是Int128.
BigInteger≠Int128
2> Rick Sladkey..:
虽然BigInteger
对于大多数应用程序来说是最佳解决方案,但如果您有性能关键的数值计算,则可以使用Dirichlet.Numerics库中的完整Int128
和UInt128
实现.这些类型是如果有用的话和过小,但速度太慢.Int64
UInt64
BigInteger
3> Jon Skeet..:
不,.NET <= 3.5中没有任何内容.我希望/期望BigInteger能够在.NET 4.0中获得回报.(它是从.NET 3.5中删除的.)
它实际上是[在.NET 4.0中重新引入](http://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v = vs.110).aspx)并且仍然存在.
@markshep:同意,虽然我认为在几乎所有答案中添加复制/粘贴评论实际上并不是一个好主意.但对于想要使用大整数的人来说,"BigInteger"可能是最好的解决方案.当然,需要额外的工作来使其以与Int128相同的方式溢出.