22

Javadocを読むと、Math.Eは「自然対数の底であるeに他のどの値よりも近いdouble値」であることがわかります。Math.Eの出力値は2.718281828459045ですが、Math.exp(1.0)の値は同じ値である必要があります:2.7182818284590455(最後にもう1つ5)。

ドキュメントから、Math.Eのビットは、Math.exp(1.0)によって生成された計算よりも、eの実際の値に近づくように「手動で調整」されているようです。これは正しいですか、それともドキュメントを間違って読んでいますか?

それが正しければ、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

Math.E

2.718281828459045

数学.exp(1.0)

2.7182818284590455

したがって、これはウィキペディアの値、2.7182818284590452 です。唯一の違いは、値が 2 ではなく 5 である Math.exp(1.0) の最後の桁の丸め誤差です。厳密に言えば、Math.E の方が正確ですが、本当にクレイジーなことをしていない限り、精度は問題になりません。

Math.exp(1.0) の代わりに計算済みの Math.E を使用する場合、速度に関する考慮事項がある場合があります。あなたもそれをチェックしたいかもしれません。

于 2012-09-11T17:28:59.907 に答える