问题
你想创建或测试正无穷、负无穷或NaN(非数字)的浮点数。
解决方案
Python并没有特殊的语法来表示这些特殊的浮点值,但是可以使用float()来创建它们。比如:
a = float('inf') b = format('-inf') c = float('nan') print(a) # ->inf print(b) # ->-inf print(c) # ->nan
为了测试这些值的存在,使用math.isif()和math.isnan()函数。比如:
import math print(math.isinf(a)) # ->True print(math.isnan(c)) # ->True
讨论
无穷大数在执行数学计算的时候会传播,比如:
a = float('inf') print(a + 45) # ->inf print(a * 10) # ->inf print(10 / a) # ->0.0
但是有些操作时未定义的并返回一个NaN结果。比如:
a=float('inf') print(a/a) # ->nan b=float('-inf') print(a+b)# ->nan
NaN值会在所有操作中传播,而不会产生异常。比如:
c=float('nan') print(c+23)# ->nan print(c/2)# ->nan print(math.sqrt(c))# ->nan
NaN值的一个特别的地方是它们之间的比较操作总是返回False。比如:
c=float('nan') d=float('nan') print(c==d) # ->False print(c is d) # ->False
由于这个原因,测试一个NaN值的唯一安全的方法就是使用math.isnan()