我正在编写一个应用程序,该应用程序涉及带有大量数字的算术运算。我以前写过一个类,它通过将大数定义为字符串然后使用慢算术字符串函数来简化处理大数。这是最好的方法吗?如果没有,我应该如何解决这个问题?C# 有针对这种情况的内置功能吗?
5 回答
如果您可以在 .NET 4 上执行此操作,System.Numeric.BigInteger可以提供帮助。如果您使用的是旧版本的 .NET,IntX将为您提供帮助。
另请参阅this SO question on big integers in C#。
.NET 4 将通过 BigInteger 类型内置此功能。据称这是很好的调整,应该表现得很好。
对于 3.5 及更早版本,您可以从动态语言运行时源中获取 BigInteger 的实现。(参见例如http://dlr.codeplex.com/sourcecontrol/changeset/view/40021?projectName=dlr#694008并深入到 Src / Runtime / Microsoft.Dynamic / Math。)我不知道这是否已经与 .NET 4 BigInteger 类型一样高度调整,但它仍然应该比您的字符串版本更有效,因为它在内部使用整数类型表示大数并使用整数运算执行算术。
GNU MP bignum 库是最快的库之一。它有一个 .NET 包装器 http://gnumpnet.codeplex.com/
这是另一个用于 .NET的bignum 库,带有源代码。
我在密码学项目(需要非常大的数字)中多次使用的 Big Integer 类。效果很好。
在 dotnet 4.0 以上的版本中,
System.Numerics.BigInteger
会帮你解决这个问题。
如果使用上述语法出现程序集引用错误,则使用添加引用
http://www.dllme.com/dll/files/system_numerics_dll.html。
希望对你有帮助..!