我开发的数学解析器能够评估字符串像'5+b*sqrt(c^2)'。我使用ANTLR的解析,并取得良好进展。现在,我摔倒了Java类BigDecimal,心想:嘿,为什么不想着这里的精度

我的问题是,在Java API并不像BigDecimal java.lang.Maths提供三角函数的方法。你知道,如果有喜欢的Apache下议院任何好的数学库外面,处理这个问题?

在其他问题是如何实现的功率的方法,这样我可以计算4.9 ^ 1.4 BigDecimals。这是可能的?

约数值计算书请求也被理解。

有帮助吗?

解决方案

ApFloat 是其中包含的trigometric功能和非整数幂的任意精度的近似值两者的文库;然而,它使用自己的内部表示,而不是BigDecimalBigInteger。我以前没有使用过,所以我不能保证其正确性或性能特性,但是API似乎相当完整。

其他提示

BigDecimal不提供这些方法,因为BigDecimal模型的有理数。三角函数,平方根和权力非整数(我的猜测包括平方根)所有产生无理数。

这些可以以任意精度数近似,但确切的值不能被存储在BigDecimal。这不是真正的他们是什么。如果你反正近似的东西,你可能也只是使用double

在大数学库提供了所有标准的先进的数学函数(POW,开方,日志,罪过,...)的BigDecimal的。

https://github.com/eobermuhlner/big-math

使用Java BigDecimals的的现有特征,即,以允许有限的精度运算所描述 href="https://stackoverflow.com/a/42590374/502187">,我最近实施的sqrt / 1,EXP / 1,黄褐色/ 1等。对于这些数量的对象。

themselve使用麦克劳林和泰勒级数,加上适当的范围内的降低的数值算法,以保证足够的速度和该系列的广度。

下面是一个例子计算,Ramanujan的常数:

Jekejeke Prolog 2, Runtime Library 1.1.8
(c) 1985-2017, XLOG Technologies GmbH, Switzerland

?- use_module(library(stream/console)).
% 0 consults and 0 unloads in 0 ms.
Yes

?- X is mp(exp(pi*sqrt(163)), 60).
X = 0d262537412640768743.999999999999250072597198185688879353856320

在啄写于序言和Java的混合物。速度和它的精度工作仍然在进行中。该代码是目前在 GitHub的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top