2016-11-11 124 views
0

被打了一下,用數值穩定性,發現這個:爲什麼這個python數值錯誤發生?

>>> sum([1e4,1e20,-1e20]) 
16384.0 

任何想法,爲什麼會出現這種情況?

+6

可能出現[爲什麼浮點數不準確?](http://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate) – Kevin

+0

可能出現[浮點數學中斷?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

回答

3

前兩個數字不能精確求和,因爲Python的浮點表示不支持許多重要的十進制數字(它支持16位數字,並且您的總和需要17才能準確表示)。 Python在尾數最不重要的部分用一個位來近似答案。

添加第三個數字後得到的答案和您期望的答案之間的差異表示中間結果表示中的錯誤。扣除後,尾數中的那一位是剩下的;當指數被歸一化時,你就剩下16384了。事實上,它是兩個能量的事實,你發生了什麼事情。

相關問題