4

我正在寻找一些方法来处理数千万位数的数字,并且可以在这个级别上进行数学运算。我可以使用 Java 和一点 Python。因此,其中一个的库会很方便,但是可以处理这些数字的程序也可以工作。有没有人有什么建议?

谢谢

4

5 回答 5

5

对于 Java,请查看内置类BigIntegerBigDecimal. BigInteger数字的大小受可用内存的限制。可以表示任意大的以 10 为底的数字,小数点右侧BigDecimal最多 2 32位(实际上,也受可用内存限制)。

这两者都仅限于相当基本的数学运算。(算术、整数幂等。没有根、日志等。)如果您需要更多的东西,请查阅NIST Java Numerics 页面上的库列表。(Apfloat 包支持任意精度的超越函数和复杂的数学。)

于 2012-11-22T15:27:31.963 回答
5

Python 无需任何库即可处理大量数字。

>>> 100 ** 100
1000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000L

尽管正如其他人所建议的那样,如果您想要额外的速度,您可能想要使用gmpy 。


在 Java 中,您可以使用BigInteger

于 2012-11-22T15:27:32.250 回答
2

对于 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

于 2012-11-22T16:43:10.187 回答
1

BigDecimal 应该足够好。但是,你可以看看JScience

于 2012-11-22T15:30:49.920 回答
0

你需要什么样的数学运算?

Java 已经提供了诸如 java.math.BigDecimal 或 java.math.BigInteger 之类的类,您可以使用它们来做一些基本的事情(加法、乘法等)

于 2012-11-22T15:31:36.120 回答