天天看點

為什麼0.1+0.2≠0.3?怎麼解決python浮點數損失精度問題

作者:卷皮練習冊

在計算機中計算0.1 + 0.2,結果不等于 0.3 ,而是0.30000000000000004,為什麼會出現這個結果呢?下文一步一步來闡述下python浮點數損失精度問題,及如何解決該問題。

0.1+0.2≠0.3現象

為什麼0.1+0.2≠0.3?怎麼解決python浮點數損失精度問題

0.1+0.2≠0.3代碼

0.1+0.2≠0.3根因——python浮點數損失精度問題

0.1+0.2≠0.3的具體原因,是因為Python 中使用雙精度浮點數來存儲小數。在 Python 使用的 IEEE 754 标準(52M/11E/1S)中,采用的是一種二進制版的科學計數法格式,8位元組64位存儲空間配置設定52位來存儲浮點數的有效數字,11位存儲指數,1位存儲正負号。

52位有效數字雖然看起來很多,但二進制小數在表示有理數時,經常會遇到到無限循環的問題。很多數字在十進制小數中是有限的,但在二進制中卻是無線循環的。

舉例:十進制的 1/10,在十進制中可以寫為 0.1 ;但在二進制中,得寫成:0.0001100110011001100110011001100110011001100110011001…..(後面全是1001 循環)。

因浮點數隻有52位有效數字,故從第53位開始就舍入了,這樣就造成了”浮點數精度損失“問題。舍入(round)的規則為“0 舍 1 入”,是以就會出現數字有時候比實際稍大一點,有時候比賽數字稍小一點的現象。

解決python浮點數損失精度問題

在python中可以采用采用round()函數,對資料進行處理。

round()函數的格式:round(x, d), 其中x表示需要被處理的資料,d表示要傳回的小數位數,即round(x, d)代表傳回參數x的四舍五入的有 d 位小數的一個數字。d=0表示取整,d=1表示要傳回一位小數,以此類推。此外,round()會自動四舍五入。

為什麼0.1+0.2≠0.3?怎麼解決python浮點數損失精度問題

python代碼

注意:整數+浮點數=浮點數,如1+3.0=4.0。是以,還需要注意不确定尾數的問題。

為什麼0.1+0.2≠0.3?怎麼解決python浮點數損失精度問題

python代碼