python的特殊數字類型(無窮大、無窮小等)


float('inf') 表示正無窮

-float('inf') 或 float('-inf') 表示負無窮

其中,inf 均可以寫成 Inf

 

起步
python中整型不用擔心溢出,因為python理論上可以表示無限大的整數,直到把內存擠爆。而無窮大在編程中常常需要的。比如,從一組數字中篩選出最小的數字。一般使用一個臨時變量用於存儲最后結果,變量去逐個比較和不斷地更新。而這臨時變量一般要初始無窮大或者去第一個元素的值。

正無窮大與負無窮大
python中並沒有特殊的語法來表示這些值,但是可以通過 float() 來創建它們:

>>> a = float("inf")
>>> b = float("-inf")
>>> a
inf
>>> b
-inf
為了測試這些值的存在,使用 math.isinf() 進行判斷:

>>> import math
>>> math.isinf(a)
True
>>> math.isinf(b)
True
無窮大數在執行數學計算的時候會傳播
這個就類似於數學中講述的,無窮大加上一個常數還是無窮大,無窮大與無窮大相等:

>>> a = float('inf')
>>> a + 45
inf
>>> a * 10
inf
>>> 10 / a
0.0
>>> float("inf") == float("inf")
True
無窮大在比較中比任何一個數都要大。
正無窮與負無窮相加的結果是什么
有些操作時未定義的並會返回一個 NaN 結果:

>>> a = float('inf')
>>> a/a
nan
>>> b = float('-inf')
>>> a + b
nan
表示非數字的 NaN
nan 值在所有操作中也會傳播,並且不會產生異常:

>>> c = float('nan')
>>> c + 23
nan
>>> c / 2
nan
>>> c * 2
nan
>>> math.sqrt(c)
nan
使用 math.isnan() 可以判斷值是否是 NaN:
>>> math.isnan(c)
True
nan 值的任何比較操作都是返回 False :

>>> float("nan") == float("nan")
False
>>> c > 3
False
更安全的類型轉換

由於無窮的存在,因此字符串裝浮點數就存在的一些例外,並且這個轉換過程不會拋出異常。如果程序員們想改變 python 的默認行為,可以使用 fpectl 模塊,但是它在標准的Python 構建中並沒有被啟用,它是平台相關的,並且針對的是專家級程序員。這里提供一個比較簡單的轉換,就是加一個 isdigit() 判斷:

def str2float(ss):
if not ss.isdigit():
raise ValueError
return float(ss)

sss = "inf"
a = str2float(sss)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM