阅读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,但在这个特定问题上找不到任何东西。
答案 0 :(得分:19)
小数点后16位的实际值是2.7182818284590452; 2更接近0而不是5,所以常数更接近。
请注意,在使用任一数字进行浮点计算时,您的答案的浮点表示中的错误很可能会使您使用哪一个错误 不相关的。
答案 1 :(得分:6)
Math.E
2.718281828459045
Math.exp(1.0)
2.7182818284590455
所以这是来自维基百科的值,2.7182818284590452唯一的区别是我可以看到Math.exp(1.0)的最后一位数的舍入误差,其中值为5而不是2.严格来说Math.E更准确但除非你做一些非常疯狂的事情,否则精确度无关紧要。
使用预先计算的Math.E而不是Math.exp(1.0)可能需要考虑速度。您可能也想检查一下。