BigDecimal Euler的数字计算来模拟Math.exp(double a)

时间:2012-08-07 23:54:26

标签: java

是否有普遍接受的方式在BigDecimal中获取Euler的数字?

我基本上想做Math.exp(double a),我基本上想要相同的函数但是使用BigDecimal进行计算以防止其他计算的精度损失。

我想到了,

BigDecimal.valueOf(Math.E).pow(BigDecimal.SOMEOTHERNUMBER)

但不确定这是否是解决问题的正确方法。

3 个答案:

答案 0 :(得分:2)

问题在于欧拉的数字是不合理的;在BigDecimal中,你必须拥有无限的记忆才能拥有它。之前没有存储值的原因是,无论您需要多少小数位,您的当前应用程序都没有正确的数字。

您将需要确定所需的小数位数,然后使用String构造函数构造BigDecimal表示(new BigDecimal(“2.71828 ...”))。

答案 1 :(得分:1)

嗯,Math.E是双倍的。如果您想要更高精度的欧拉数表示,您可以使用一些任意精度的小数位创建它,或者存在具有高精度E版本的BigDecimal数学库。

你可以用这样的东西来近似一个:Better approximation of e with Java

答案 2 :(得分:0)

虽然对于大多数计算来说,双Math.E应该足够准确,但有一种方法可以更准确地计算 e

如果你想得到双倍可以包含的精度更高的 e ,你可以通过加总1/0!,1/1!,1/2,1来计算它! / 3!...

哪里!意味着阶乘。只需将从零开始的所有因子的倒数相加即可。您添加的术语越多,您获得的精确度就越高。当然,由于 e 是不合理的,你永远无法获得真正的价值,但你可以非常接近。