哪个更准确?java.lang.Math.E 或 Math.exp(1.0)

2022-09-02 01:33:20

阅读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,但找不到有关此特定问题的任何内容。


答案 1

16位小数的实际值为2.7182818284590452;2 更接近于 0 而不是 5,因此常数更接近。

请注意,当使用任一数字进行浮点计算时,答案的浮点表示中的错误很可能使您使用哪一个基本上无关紧要。


答案 2

数学.E

2.718281828459045

数学(1.0)

2.7182818284590455

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

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