Python3 - 无穷大与NaN

问题

创建或测试正无穷(inf)、负无穷(-inf)NaN等非数字的浮点数。

解决方案

Python并没有特殊的语法来表示这些特殊的浮点值,但是可以使用 float() 来创建它们。比如:

print(float('-inf'))
print(float('inf'))
print(float('nan'))

-inf
inf
nan

为了测试这些值的存在,使用 math.isinf()math.isnan() 函数。比如:

import math
print(math.isinf(float('inf')))
print(math.isnan(float('nan')))

True
True

讨论

想了解更多这些特殊浮点值的信息,可以参考IEEE 754规范。 也有一些地方需要特别注意,特别是跟比较和操作符相关的时候。

无穷大数在执行数学计算的时候会传播,比如:

a = float('inf')
print(a + 40)
print(a * 10)
print(10 / a)

inf
inf
0.0

有些操作未定义,但会返回一个NaN结果。比如:

a = float('inf')
b = float('-inf')
print(a / a)
print(a + b)

nan
nan

NaN值会在所有操作中传播,而不会产生异常。比如:

c = float('nan')
print(c + 23)
print(c / 2)

nan
nan

NaN值的一个特别的地方是它们之间的比较操作总是返回False。比如:

c = float('nan')
d = float('nan')
print(c == d)
False

由于这个原因,测试一个NaN值的唯一安全的方法是使用 math.isnan()

你可能感兴趣的:(Python3 - 无穷大与NaN)