Java - 计算大型数学表达式

3
我面临一个场景,需要计算一些庞大的数学表达式。这些表达式本身很简单,即只有传统的BODMAS基础,但作为操作数出现的数字非常大,高达1000位数。我知道java.math模块中的BigInteger类,但正在寻找另一种方式,使计算速度更快。作为一个在Java中仍在摸索的人,任何关于此方面的指针或建议都将是极大的帮助。
此致 p1nG

有点相关:https://dev59.com/DErSa4cB1Zd3GeqPTREk - jldupont
8
你如何知道BigInteger不够“快速”? - Jason S
1
@ping:快速的方式不是一个可衡量的要求(例如,您需要计算在少于1毫秒内完成吗?)您尝试过BigInteger并决定它太慢了吗? - Alon
5个回答

11

在寻找更优化的解决方案之前,建议使用BigInteger进行一些测试计算并对结果进行性能分析,看它是否适合您的需求。


5

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

除非你有不使用BigInteger的特定需求。


@所有人:感谢大家的回复。我确实尝试了BigInteger,但遇到的问题是当我尝试计算像“7+3”这样的字符串,然后将结果存储在BigInteger中时,它会抛出一个NumberFormat异常。有什么指导可以解决这个问题吗? - ping
3
你想要的是 BigInteger("7").add(BigInteger("3")) - Chinmay Kanchi

1

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


1

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

如果您想要更快,您可以尝试编写汇编语言来使用位移模式进行专门的数学计算(例如,除以2往往是一个简单的右移),但如果您正在进行多种类型的方程式计算,那么这将非常不切实际。

与int相比,BigInteger只是慢了一些,但对于超过64位的数字操作,它可能是您可能获得的最佳选择,而不需要转到另一种语言--即使这样,除非使用汇编语言,否则您可能不会得到太大的改进...


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接