為什么 np.exp(x) 不等于 np.exp(1)**x?
例如:
np.exp(400)
>>>5.221469689764144e 173
np.exp(1)**400
>>>5.221469689764033e 173
np.exp(400)-np.exp(1)**400
>>>1.1093513018771065e 160
uj5u.com熱心網友回復:
這是提高這種差異的 numpy 的優化。
實際上,您必須了解數學中的歐拉數是如何計算的:
e = (1/n)**n n == inf。
我認為 numpy 會按特定順序停止:
您在此處的numpy exp 檔案中對歐拉數的計算方式不是很清楚。
由于該階數不等于無窮大,因此兩次計算中的差異很小。
實際上,該值np.exp(400)是使用以下方法計算的:(1 400/n)**n
>>> (1 400/n)**n
5.221642085428121e 173
>>> numpy.exp(400)
5.221469689764144e 173
在這里,您擁有n = 1000000000000的非常小,并且在 10e-5 時提高了這種差異。
事實上,歐拉數沒有確切的值。就像Pi,你只能有一個近似值。
uj5u.com熱心網友回復:
這看起來像是一個舍入問題。在第一種情況下,它在內部使用非常精確的值e,而在第二種情況下,您得到的值不太精確,當乘以 400 倍時,精度問題變得更加明顯。
使用 Windows 計算器時的實際結果是5.2214696897641439505887630066496e 173,因此您可以看到第一個結果很好,而第二個結果則不然。
5.2214696897641439505887630066496e 173 // calculator
5.221469689764144e 173 // exp(400)
5.221469689764033e 173 // exp(1)**400
從您的結果開始,它看起來使用了 15 位精度的值。
2.7182818284590452353602874713527 // e
2.7182818284590450909589085441968 // 400th root of the 2nd result
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391875.html
上一篇:如何根據另一個陣列的間隔獲取一個numpy陣列的排名?
下一篇:更改跟蹤行為Numpy
