是否有普遍接受的方式在BigDecimal中获取Euler的数字?
我基本上想做Math.exp(double a),我基本上想要相同的函数但是使用BigDecimal进行计算以防止其他计算的精度损失。
我想到了,
BigDecimal.valueOf(Math.E).pow(BigDecimal.SOMEOTHERNUMBER)
但不确定这是否是解决问题的正确方法。
答案 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 是不合理的,你永远无法获得真正的价值,但你可以非常接近。