首頁 >後端開發 >Python教學 >Python中浮點數的原理以及運算詳解

Python中浮點數的原理以及運算詳解

黄舟
黄舟原創
2017-10-12 10:56:443173瀏覽

這篇文章主要介紹了Python中的浮點數原理與運算分析,結合實例形式分析了Python浮點數操作的常見錯誤,並簡單解釋了浮點數運算的原理與比較運算實現方法,需要的朋友可以參考下

本文實例講述了Python中的浮點數原理與運算。分享給大家供大家參考,具體如下:

先看一個違反直覺的例子:


>>> s = 0.
>>> for i in range(10): s += .1
>>> s
0.9999999999999999
# 错误被累加

再看一個更為普遍,直接影響判斷邏輯的例子:


>>> from math import sqrt
>>> a = sqrt(2)
>>> a*a == a
False

之所以會出現以上的結果,在於Python (更準確地說是電腦硬體體系結構)對浮點數的表示,我們來看計算機(基於二進位)對十進制小數0.1 的表示,十進制小數向二進制小數轉換的方法請參閱Python十進制小數與二進制小數相互轉換。將十進制小數 0.1 轉換為二進制時的結果為 0.0001100110011001....,無限循環,計算機無法展示無限的結果,只能對結果進行截斷,這是浮點數精度問題的根源。

「==」 on floats

#基於以上的考慮,當我們進行浮點數的相等比較時,要特別小心,直接使用== 是有問題的,一個通用的做法即是,不是檢測浮點數是否相等,而是檢測二者是否足夠接近,


##

>>> a = sqrt(2)
>>> abs(a*a-2) < epsilon
# 判断是否小于某一小量

以上是Python中浮點數的原理以及運算詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn