【问题标题】:Program or library to handle massive numbers [closed]处理大量数字的程序或库[关闭]
【发布时间】:2012-11-22 15:26:06
【问题描述】:

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

谢谢

【问题讨论】:

  • BigInteger 和 BigDecimal 有什么问题要查找 java 可以使用此数据类型执行的各种 jab 库?
  • 会和sys.maxint一起玩吗?
  • 您的问题域是什么?我很难想出实际应用需要同时总准确度的数量。
  • 我猜密码学.. :)
  • 它也应该给老板足够的时间告诉老板“但它在计算,仍然!”。我试图计算将一千万位数中的两个加数相加所需的时间,但我数不清了。

标签: java python math


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    >>> 100 ** 100
    1000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000L
    

    尽管如其他人建议的那样,如果您想提高速度,您可能需要使用 gmpy


    在 Java 中,您可以使用 BigInteger

    【讨论】:

    • 但是这个数字不是几百万位数的几位
    • inspectorG4dget:当然,我确实尝试过先发布一个数千万位数的示例,但 StackOverflow 说帖子太长,所以我做了一个较短的示例。但我认为你应该能够明白这一点。请发挥一点想象力。
    • @RobW 因为 1e999 被解析为浮点数,而不是整数
    • 还有 GMPY。用于 Python 的 GMP。可能会更快。
    • @MarkByers:它似乎挂在打印这么大的数字上。 This question 可能是相关的。
    【解决方案3】:

    对于 Python,我推荐 gmpy,它是 GNU Bignum library 的 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

    【讨论】:

      【解决方案4】:

      BigDecimal 应该足够好了。不过你可以看看JScience

      【讨论】:

        【解决方案5】:

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

        Java 已经提供了诸如 java.math.BigDecimal 或 java.math.BigInteger 之类的类,您可以使用它们来执行基本操作(加法、乘法等)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-26
          • 2015-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多