python 數字系列-無窮大與NaN


無窮大與NaN

問題

你想創建或測試正無窮、負無窮或NaN(非數字)的浮點數。

解決方案

Python並沒有特殊的語法來表示這些特殊的浮點值,但是可以使用 float() 來創建它們。比如:

>>> a = float('inf') >>> b = float('-inf') >>> c = float('nan') >>> a inf >>> b -inf >>> c nan >>> 

為了測試這些值的存在,使用 math.isinf() 和 math.isnan() 函數。比如:

>>> math.isinf(a) True >>> math.isnan(c) True >>> 

討論

想了解更多這些特殊浮點值的信息,可以參考IEEE 754規范。 然而,也有一些地方需要你特別注意,特別是跟比較和操作符相關的時候。

無窮大數在執行數學計算的時候會傳播,比如:

>>> a = float('inf') >>> a + 45 inf >>> a * 10 inf >>> 10 / a 0.0 >>> 

但是有些操作時未定義的並會返回一個NaN結果。比如:

>>> a = float('inf') >>> a/a nan >>> b = float('-inf') >>> a + b nan >>> 

NaN值會在所有操作中傳播,而不會產生異常。比如:

>>> c = float('nan') >>> c + 23 nan >>> c / 2 nan >>> c * 2 nan >>> math.sqrt(c) nan >>> 

NaN值的一個特別的地方時它們之間的比較操作總是返回False。比如:

>>> c = float('nan') >>> d = float('nan') >>> c == d False >>> c is d False >>> 

由於這個原因,測試一個NaN值得唯一安全的方法就是使用 math.isnan() ,也就是上面演示的那樣。

有時候程序員想改變Python默認行為,在返回無窮大或NaN結果的操作中拋出異常。 fpectl 模塊可以用來改變這種行為,但是它在標准的Python構建中並沒有被啟用,它是平台相關的, 並且針對的是專家級程序員。可以參考在線的Python文檔獲取更多的細節。


免責聲明!

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



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