我正在寻找一些方法来处理数千万位数的数字,并且可以在这个级别上进行数学运算。我可以使用 Java 和一点 Python。因此,其中一个的库会很方便,但是可以处理这些数字的程序也可以工作。有没有人有什么建议?
谢谢
对于 Java,请查看内置类BigInteger
和BigDecimal
. BigInteger
数字的大小受可用内存的限制。可以表示任意大的以 10 为底的数字,小数点右侧BigDecimal
最多 2 32位(实际上,也受可用内存限制)。
这两者都仅限于相当基本的数学运算。(算术、整数幂等。没有根、日志等。)如果您需要更多的东西,请查阅NIST Java Numerics 页面上的库列表。(Apfloat 包支持任意精度的超越函数和复杂的数学。)
Python 无需任何库即可处理大量数字。
>>> 100 ** 100
1000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000L
尽管正如其他人所建议的那样,如果您想要额外的速度,您可能想要使用gmpy 。
在 Java 中,您可以使用BigInteger。
对于 Python,我推荐gmpy ,它是GNU Bignum 库的 Python 包装器。虽然理论上Python 确实可以处理任意大的整数(仅受内存限制),并且它可以处理几千位左右的数字,但它并不是非常适合处理百万位整数。它不使用最先进的算法进行快速乘法、数字转换和其他标准操作。 gmpy
相反,旨在处理这种数量级的数字。
以下是一些示例计时,表明即使是几千位数gmpy
也比 Python 的内置 long 快得多:
$ python -m timeit -s "from gmpy import mpz" "str(mpz(10)**10000)"
1000 loops, best of 3: 575 usec per loop
$ python -m timeit "str(10**10000)"
100 loops, best of 3: 11.8 msec per loop
顺便说一句:在某个时候,一位 Python 核心开发人员尝试将 Python 的长整数实现替换为直接使用 GMP 的实现。事实证明,对于日常的非大整数用例,它实际上减慢了 Python 的速度。有关详细信息,请参阅http://bugs.python.org/issue1814。
BigDecimal 应该足够好。但是,你可以看看JScience
你需要什么样的数学运算?
Java 已经提供了诸如 java.math.BigDecimal 或 java.math.BigInteger 之类的类,您可以使用它们来做一些基本的事情(加法、乘法等)