22

阅读 Javadocs,我看到 Math.E 是“比任何其他值都更接近自然对数的底 e 的双精度值。 ”。Math.E 的打印值是 2.718281828459045,而 Math.exp(1.0) 的值应该是相同的值是:2.7182818284590455(最后再加一个 5)。

从文档中,听起来 Math.E 中的位已经“手动调整”以更接近 e 的实际值,而不是 Math.exp(1.0) 产生的计算。这是正确的,还是我错误地阅读了文档?

如果这是正确的,那么使用 Math.pow(Math.E, n) 是否比 Math.exp(n) 更准确,还是更少?我已经用谷歌搜索并搜索了 SO,但在这个特定问题上找不到任何东西。

4

2 回答 2

19

小数点后 16 位的实际值为 2.7182818284590452;2 比 5 更接近 0,因此常数更接近。

请注意,在使用任一数字进行浮点计算时,很可能答案的浮点表示形式中的错误会使您使用哪个数字在很大程度上无关紧要。

于 2012-09-11T17:23:52.933 回答
7

数学.E

2.718281828459045

数学.exp(1.0)

2.7182818284590455

所以这是来自维基百科的值,2.7182818284590452 我能看到的唯一区别是 Math.exp(1.0) 的最后一位数字的舍入误差,其中值为 5 而不是 2。所以严格来说 Math.E 更准确但除非您正在做一些非常疯狂的事情,否则精度无关紧要。

使用预先计算的 Math.E 而不是 Math.exp(1.0) 可能需要考虑速度。您可能也想检查一下。

于 2012-09-11T17:28:59.907 回答