大量类的最有效实现
当对非常大的数字进行计算时,整数数据类型(例如 double 或 int64)无法满足要求,可能需要一个单独的类来处理如此大的数字。
有人愿意提供一种有效的算法来最好地做到这一点吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
当对非常大的数字进行计算时,整数数据类型(例如 double 或 int64)无法满足要求,可能需要一个单独的类来处理如此大的数字。
有人愿意提供一种有效的算法来最好地做到这一点吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
使用语言的内置功能对我来说很有效。
Java 有 BigInteger 和 BigDecimal,如果数字超出整数范围或类似情况,Python 会自动切换到类似于 Java 的对象。
至于其他语言,我不知道。
我讨厌重新发明轮子。
Using the built-in features of a language work for me.
Java has
BigInteger
andBigDecimal
, and Python automagicaly switches to an object similar to Java's if a number gets out of the range of aninteger
or whatnot.As for other languages though, I have no idea.
I hate re-inventing the wheel.
做你自己的 BigNum 库很复杂,所以我会说像 jjnguy。 使用您的语言提供的任何内容作为库。
在 .net 中,引用 VisualJ dll,因为它们包含 BigInteger 和 BigDecimal 类。 但是,您应该注意这些库的一些限制,例如缺乏平方根方法。
Doing your own BigNum library is complicated, so i'd say like jjnguy. Use whatever your language offers as libraries.
In .net, reference the VisualJ dll as they contain the BigInteger and BigDecimal classes. You should however be aware of some limitations of these libraries, like the lack of a square root method, for example.
在 C# 4.0 中,使用 BigInteger 类型
In C# 4.0 use the BigInteger type
您询问的是任意精度算术,该主题书籍已写完。 如果您只想要一个简单且相当高效的 C# BigNum 库,您可能需要查看 IntX。
You're asking about arbitrary-precision arithmetic, a subject on which books have been written. If you just want a simple and fairly efficient BigNum library for C#, you might want to check out IntX.
您的问题有 2 种解决方案:
简单方法:
使用外部库,例如“GNU MP Bignum 库”,并忘记实现细节。
困难的方法:
设计您自己的包含多个高阶数据类型(如 double 或 int64 变量)的类/结构,并使用运算符重载(在 C++ 中)或通过名为 add、subtract、multiply、shift 等的方法(在 JAVA 和其他 OO 中)为它们定义基本数学运算语言)。
如果您需要任何进一步的帮助,请告诉我。 我过去曾做过几次这样的事情。
There are 2 solutions to your problem:
Easy way:
Use an external library such as 'The GNU MP Bignum Library and forget about implementation details.
Hard way:
Design your own class/structure containing multiple higher order datatypes like double or int64 variables and define basic math operations for them using operator overloading (in C++) or via methods named add, subtract, multiply, shift, etc. (in JAVA and other OO languages).
Let me know if you need any further help. I have done this a couple of times in the past.