今天CSDN的問答欄目中,有同學提出了一個很有意思的問題:為什么3個1.01直接相乘的結果和1.01的3次方不一樣呢?
>>> 1.01*1.01*1.01
1.030301
>>> 1.01**3
1.0303010000000001
從人類的思維角度看,1.01的3次方就是3個1.01相乘,結果自然應該相同,不過,Python計算 a b a^b ab的話,并非是 b b b個 a a a相乘,因為 b b b可以是任意實數,總不能0.5個 a a a相乘吧?
>>> 1.01**(0.5)
1.004987562112089
>>> 1.01**(-0.5)
0.9950371902099892
實際上,Python計算 a a a** b b b,是借助內置函式pow()實作的,該函式通過對數計算將 a b a^b ab轉換為 e x e^x ex這樣固定底數為 e e e的指數函式,
a b = e l o g a b = e b l o g a a^b = e^{loga^b}=e^{bloga} ab=elogab=ebloga
理解了這個公式,用Python的內置數學模塊math,可以很容易地還原Python就算1.01的3次方的程序,
>>> import math
>>> math.exp(3*math.log(1.01))
1.0303010000000001
這與CSDN的問答欄目中那位同學的計算結果完全一致,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279539.html
標籤:AI
上一篇:閑魚商品選投實時性優化
下一篇:關于凈推薦值(NPS)的理解
