嗨,大家好,歡迎來到我的python教程專欄!今天我們要講的是Python中乙個非常有趣的話題——浮點運算。在我們的日常編碼中,我們可能會遇到一些令人煩惱的浮點運算,讓我們一起揭開這個謎團的神秘面紗吧!
問題的本質:十進位與二進位
首先,讓我們了解浮點數在計算機中是如何表示的。 在硬體級別,浮點數表示為基於 2 的二進位分數。 這意味著某些十進位小數可能無法準確地表示為二進位分數。 例如,十進位 01 是二進位中的無限迴圈分數。 因此,我們在機器中儲存的是近似值,而不是真正的十進位小數。
下面是乙個示例
例如,我們都知道小數點 1 3 無法準確表示,我們只能將其寫下來。 333,但永遠不能寫出正好等於 1 3 的小數點後一位。 再次,01 二進位計算機儲存的是近似值,而不是精確值。
print(0.1 + 0.1 + 0.1 == 0.3) 這將返回 false
輸出
false
小數點顯示問題
為了方便顯示,Python 通常會對浮點數的顯示值進行四捨五入。 因此,我們看到的值與我們實際儲存的值之間可能略有不同。
匯入數學模組。
import math
定義浮點數。
num = 0.1
列印實際儲存的二進位近似值。
print(num)
使用格式化字串顯示 40 位有效數字。
formatted_num = format(num, '.40g')
print(formatted_num)
列印 num 的真實值。
print(repr(num))
輸出
如何處理?
為了更好地控制浮點數的輸出,我們可以使用格式化的字串來控制有效數字的顯示:
方法 1
匯入數學模組。
import math
formatted_num = format(math.pi, '.12g') 顯示 12 位有效數字。
print(formatted_num)
輸出'3.14159265359'
輸出
或
方法二
匯入數學模組。
import math
print(''.format(math.pi))顯示兩個小數位。
輸出'3.14'
輸出
總結
浮點問題並非 Python 所獨有,它存在於所有支援硬體浮點運算的語言中。 對於絕大多數日常應用,浮點運算的誤差對最終結果沒有太大影響。 但是,在某些精度至關重要的場景中,我們可能需要使用其他方法,例如使用字串格式,或者考慮使用支援高精度操作的庫。
最後,不要被浮點運算問題害怕只要我們有意識地處理它,並使用適當的方法,我們仍然可以得到我們想要的結果。 希望這篇文章對您有所幫助!
如果您對此主題有更多疑問,或者您還有什麼想知道的,請在評論中告訴我感謝大家的支援,我們下次再見!