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

use*_*569 21 java math

阅读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,但在这个特定问题上找不到任何东西.

Woo*_*ble 19

小数点后16位的实际值是2.7182818284590452; 2更接近0而不是5,所以常数更接近.

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


Gre*_*een 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)可能需要考虑速度.您可能也想检查一下.