我正在寻找一些方法来处理数千万位的数字,并且可以在这个级别进行数学运算。我可以使用Java和一些Python。因此,其中一个库可以方便,但是可以处理这些数字的程序也可以使用。有没有人有任何建议?
由于
答案 0 :(得分:5)
对于Java,请查看内置类BigInteger
和BigDecimal
。 BigInteger
数字的大小受可用内存的限制。 BigDecimal
可以表示任意大的基数为10的数字,小数点右边最多有2个 32 数字(实际上,也受可用内存的限制)。
这些都限于相当基本的数学运算。 (算术,整数幂等。没有根,日志等)如果你需要更多的东西,请参考Java Numerics page of NIST的库列表。 (Apfloat package支持任意精度的超越函数和复杂的数学。)
答案 1 :(得分:5)
Python可以处理大数字而无需任何库。
>>> 100 ** 100
1000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000L
虽然如其他人所建议的那样,如果您想要更高的速度,可能需要使用gmpy。
在Java中,您可以使用BigInteger。
答案 2 :(得分:2)
对于Python,我推荐gmpy,GNU Bignum library的Python包装器。虽然Python理论上 处理任意大整数(仅受内存限制),并且对于几千位左右的数字来说它很好,但它并不适合处理百万位数的整数。它不使用最先进的算法进行快速乘法,数字转换和其他标准操作。相比之下,gmpy
旨在处理这种数量的数字。
以下是一些示例时序,表明即使是几千个数字gmpy
也要比Python的内置长度快得多:
$ 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核心开发人员尝试用直接使用GMP的Python替换Python的长整数实现。事实证明,它实际上减慢了Python对于日常非巨大整数用例的速度。有关详细信息,请参阅http://bugs.python.org/issue1814。
答案 3 :(得分:1)
BigDecimal应该足够好了。但是,您可以查看JScience
答案 4 :(得分:0)
您需要什么样的数学运算?
Java已经提供了像java.math.BigDecimal或java.math.BigInteger这样的类,可以用来做基本的东西(加法,乘法等)。