Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 大十进制欧拉';模拟Math.exp的s数字计算(双a)_Java - Fatal编程技术网

Java 大十进制欧拉';模拟Math.exp的s数字计算(双a)

Java 大十进制欧拉';模拟Math.exp的s数字计算(双a),java,Java,有没有一种普遍接受的方法来获取大十进制中的欧拉数 我基本上想要做Math.exp(double a),我基本上想要相同的函数,但是使用BigDecimal进行计算,以防止其他计算的精度损失 我想做的只是 BigDecimal.valueOf(Math.E).pow(BigDecimal.SOMEOTHERNUMBER) 但不确定这是否是解决问题的正确方法。问题在于欧拉数是无理的;在BigDecimal中,必须有无限的内存才能保存它。没有以前存储的值的原因是,无论您需要多少位小数,您都没有适合当

有没有一种普遍接受的方法来获取大十进制中的欧拉数

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

我想做的只是

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

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

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


您必须确定需要多少个小数,然后使用字符串构造函数(新的BigDecimal(“2.71828…”))构造BigDecimal表示。

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


你可以用这样的方法来近似计算:

虽然double Math.E对于大多数计算应该足够精确,但是有一种方法可以计算出更高的精度

如果你想得到比double更精确的e,你可以把1/0加起来计算它!,1/1!, 1/2!, 1/3!...


哪里!意味着阶乘。只要把从零开始的所有阶乘的倒数加起来。你加起来的术语越多,你得到的结果就越精确。当然,由于e是非理性的,你永远无法得到真正的值,但你可以得到非常接近的值。

你目前的方法肯定不会给你超过16位的准确度。您需要实际计算
e
到您的目标精度。@Mysticial只要阅读您关于分支预测器的帖子,您就棒极了。所以在这种情况下,不管其他数字在未来的计算中有多精确,比如如果我做上面的BD.(Math.E).pow(x),我最多会得到E的双精度值是正确的?在大多数情况下,是的。把事情简单化一点:输出只会和最不准确的输入一样准确。因此,如果您的输入是
e
精确到
两位数(~16位),那么您的输出不会比16位更好。在您的特定情况下,您似乎需要一个完全通用的
exp()
函数。您可以使用
exp(x)
的泰勒级数。无需计算
e
。不需要给任何东西供电。将事物提升到非整数级并不容易实现。@神秘的感谢是有意义的。我只是一名初级开发人员,负责将此代码移植到新的应用程序。我想写几个测试用例来证明,从长远来看,在edge情况下,使用BigDecimal而不是Double编写应用程序更准确。:)根据应用程序的不同,
BigDecimal
甚至可能不是必需的。(特别是当它成为性能瓶颈时)
exp(x)
是最容易实现的非平凡函数,因为泰勒级数。像
log(x)
之类的东西,以及trig函数都是很好的。。。除非你想弄得一团糟,否则不要尝试
sin()
cos(x)
也有平凡的级数展开式,但如果简单地使用,它们的数值稳定性会非常糟糕。是的。你可以得到更高的精度,但最终你无法防止精度损失——你需要无限的内存来做到这一点——假设OP事先不知道这些值,他也可以使用泰勒级数展开来近似它。。