【问题标题】:Java - computing large mathematical expressionsJava - 计算大型数学表达式
【发布时间】:2009-12-23 14:33:42
【问题描述】:

我面临一个不得不计算一些庞大的数学表达式的情况。表达式本身很简单,即只有传统的 BODMAS 基本,但作为操作数出现的数字非常大,达到 1000 位数字。我确实知道 java.math 模块的 BigInteger 类,但我正在寻找一种不同的方式,以便计算也可以快速进行。我仍然在 Java 中找到自己的脚,所以任何关于 gthis 的指示或建议都会有很大帮助。

问候 p1nG

【问题讨论】:

  • 你怎么知道 BigInteger 不“快速”?
  • @ping:快速的方式不是一个可衡量的要求(例如,您需要在不到 1 毫秒的时间内完成计算)您是否尝试过 BigInteger 并认为它这么慢?

标签: java math numbers expression


【解决方案1】:

用 BigInteger 试试,用一些测试计算分析结果,看看它是否适合你,然后再寻找更优化的东西。

【讨论】:

    【解决方案2】:

    既然您说您是 Java 新手,我不得不建议您使用 BigInteger 和 BigDecimal,除非您想编写自己的任意大数字处理程序。 BigInteger 和 BigDecimal 对于它们的大多数用途来说足够快。我唯一一次遇到速度问题是在处理百万位数的数字时。

    除非您特别需要不使用 BigInteger。

    【讨论】:

    • @all:谢谢大家的回复。我确实尝试过 BigInteger,但我遇到的问题是,当我尝试计算像“7+3”这样的字符串,然后将结果存储在 BigInteger 中时,它会引发 NumberFormat 异常。任何关于如何工作的指示?
    • 你要的是BigInteger("7").add(BigInteger("3"))
    【解决方案3】:

    首先正确编写程序(使用BigFoo),然后确定优化是否合适。

    【讨论】:

      【解决方案4】:

      BigInteger/BigFloat 将是您可能获得的最优化的广义数学实现。

      如果您希望它更快,您可以编写程序集以使用位移模式进行专门的数学运算(嗯,例如除以 2 往往是简单的右移),但如果您做的不止几个不同类型的方程,那将是非常不切实际的。

      BigInteger 仅与 int 相比速度较慢,但​​它可能是您在不使用其他语言的情况下对超过 64 位左右的数字进行操作时可能获得的最佳结果——即使那样,您也可能不会除非其他语言是汇编语言,否则不会有很大的改进......

      【讨论】:

        【解决方案5】:

        我很惊讶 1000 位数字的方程式有实际应用(可能加密除外) 您能否解释一下您在做什么以及您的速度要求是什么?

        【讨论】:

          猜你喜欢
          • 2014-07-27
          • 2011-11-07
          • 2013-03-13
          • 1970-01-01
          • 2017-02-08
          • 2016-05-26
          • 2014-03-09
          • 2018-05-19
          • 1970-01-01
          相关资源
          最近更新 更多