Java BigDecimal三角法

Mar*_*rco 12 java precision trigonometry bigdecimal

我正在开发一个能够像String一样评估String的数学解析器'5+b*sqrt(c^2)'.我正在使用ANTLR进行解析并取得良好进展.现在我摔倒在Java类上BigDecimal并且想:嘿,为什么不在这里考虑精度.

我的问题是Java API不提供BigDecimal类似的三角函数方法java.lang.Math.你知道是否有像Apache Commons这样的好的数学库可以解决这个问题吗?

其他问题是如何实现功率方法,以便我可以用BigDecimals 计算4.9 ^ 1.4 .这可能吗?

关于数值计算的书籍请求也受到赞赏.

Sco*_*nes 8

ApFloat是一个包含三角函数和非整数幂的任意精度近似的库; 但是,它使用自己的内部表示,而不是BigDecimalBigInteger.我之前没有使用它,所以我不能保证它的正确性或性能特征,但api似乎相当完整.


cle*_*tus 7

BigDecimal不提供这些方法,因为BigDecimal模型是有理数.三角函数,平方根和非整数的幂(我猜包括平方根)都会产生无理数.

这些可以用任意精度数近似,但精确值不能存储在a中BigDecimal.这不是他们真正想要的.如果你无论如何都要接近某些东西,你也可以使用一个double.

  • double也是近似值,但具有固定大小的位.BigDecimals可以使用更多位. (4认同)