問題
創(chuàng)建或測試正無窮(inf)
民宿、負(fù)無窮(-inf)
或NaN
等非數(shù)字的浮點(diǎn)數(shù)。
解決方案
Python并沒有特殊的語法來表示這些特殊的浮點(diǎn)值毯盈,但是可以使用 float()
來創(chuàng)建它們崖疤。比如:
print(float('-inf'))
print(float('inf'))
print(float('nan'))
-inf
inf
nan
為了測試這些值的存在斩芭,使用 math.isinf()
和 math.isnan()
函數(shù)。比如:
import math
print(math.isinf(float('inf')))
print(math.isnan(float('nan')))
True
True
討論
想了解更多這些特殊浮點(diǎn)值的信息蝶糯,可以參考IEEE 754規(guī)范洋只。 也有一些地方需要特別注意,特別是跟比較和操作符相關(guān)的時(shí)候昼捍。
無窮大數(shù)在執(zhí)行數(shù)學(xué)計(jì)算的時(shí)候會(huì)傳播识虚,比如:
a = float('inf')
print(a + 40)
print(a * 10)
print(10 / a)
inf
inf
0.0
有些操作未定義,但會(huì)返回一個(gè)NaN結(jié)果妒茬。比如:
a = float('inf')
b = float('-inf')
print(a / a)
print(a + b)
nan
nan
NaN值會(huì)在所有操作中傳播担锤,而不會(huì)產(chǎn)生異常。比如:
c = float('nan')
print(c + 23)
print(c / 2)
nan
nan
NaN值的一個(gè)特別的地方是它們之間的比較操作總是返回False郊闯。比如:
c = float('nan')
d = float('nan')
print(c == d)
False
由于這個(gè)原因妻献,測試一個(gè)NaN值的唯一安全的方法是使用 math.isnan()
。