7

有没有一种普遍接受的方法来获得 BigDecimal 中的欧拉数?

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

我只想做,

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

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

4

3 回答 3

4

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

您将必须确定需要多少个小数,然后使用 String 构造函数 (new BigDecimal("2.71828...")) 构造 BigDecimal 表示。

于 2012-08-07T23:59:03.383 回答
1

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

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

于 2012-08-08T00:01:15.317 回答
1

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

如果你想得到比双精度更高的e,你可以通过将 1/0!、1/1!、1/2!、1/3! 之和相加来计算它。

在哪里 !表示阶乘。只需从零开始将所有阶乘的倒数相加即可。你加起来的术语越多,你得到的就越精确。当然,由于e是非理性的,因此您永远无法获得真正的价值,但您可以非常接近。

于 2012-08-08T00:02:50.140 回答