欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python中的inf与nan

程序员文章站 2022-11-05 13:25:28
Python中可以用如下方式表示正负无穷 当涉及 和 float('nan') nan Python float('inf') + 100 inf float('inf') 100 inf float('inf') 100 inf float('inf') / 100 inf float('inf' ......

python中可以用如下方式表示正负无穷

>>> float('inf') # 正无穷,inf不区分大小写,float('inf')一样可以。
inf
>>> float('-inf') # 负无穷,不区分大小写。
-inf

当涉及 > 和 < 运算时, 所有数都比 -inf 大 ,所有数都比 +inf 小。
 

>>> float('nan')
nan

nan代表not a number(不是一个数),它并不等于0,因为nan不是一个数,所以相关计算都无法得到数字。


正无穷float('inf')

>>> float('inf') + 100
inf
>>> float('inf') - 100
inf
>>> float('inf') * 100
inf
>>> float('inf') / 100
inf
>>> float('inf') + float('inf')
inf
>>> float('inf') - float('inf')
nan
>>> float('inf') * float('inf')
inf
>>> float('inf') / float('inf')
nan
>>> 100 + float('inf')
inf
>>> 100 - float('inf')
-inf
>>> 100 * float('inf')
inf
>>> 100 / float('inf')
0.0

负无穷float('inf')

>>> float('-inf') + 100
-inf
>>> float('-inf') - 100
-inf
>>> float('-inf') * 100
-inf
>>> float('-inf') / 100
-inf
>>> float('-inf') + float('-inf')
-inf
>>> float('-inf') - float('-inf')
nan
>>> float('-inf') * float('-inf')
inf
>>> float('-inf') / float('-inf')
nan
>>> 100 + float('-inf')
-inf
>>> 100 - float('-inf')
inf
>>> 100 * float('-inf')
-inf
>>> 100 / float('-inf')
-0.0

可见,正无穷float('inf')与负无穷float('inf')运算有着异曲同工之妙。


正无穷float('inf')与负无穷float('inf')之间的运算:

>>> float('inf') + float('-inf')
nan
>>> float('inf') - float('-inf')
inf
>>> float('-inf') - float('inf')
-inf
>>> float('inf') * float('-inf')
-inf
>>> float('inf') / float('-inf')
nan
>>> float('-inf') / float('inf')
nan

nan
所有涉及nan的操作,返回的都是nan。

>>> float('nan') + 100
nan
>>> float('nan') - 100
nan
>>> float('nan') * 100
nan
>>> float('nan') / 100
nan

 
比较操作时,返回的都是false,哪怕两个float('nan')互相比较都不相等。

>>> float('nan') > float('inf')
false
>>> float('nan') > float('-inf')
false
>>> float('nan') < float('inf')
false
>>> float('nan') < float('-inf')
false
>>> float('nan') == float('nan') # 注意
false

python中可以用math.isinf()与math.isnan()来判断数据是否为inf或nan。

>>> import math
>>> math.isinf(float('inf'))
true
>>> math.isinf(float('-inf'))
true
>>> math.isnan(float('nan'))
true

除此之外,还有别的方法可以用来判断数据是否为inf和nan,但上述方法是最推荐的,所以其他方法不再赘述。


正负无穷与nan的is和==判断

>>> inf = float("inf")
>>> ninf = float("-inf")
>>> nan = float("nan")
>>> inf is inf
true
>>> ninf is ninf
true
>>> nan is nan
true
>>> inf == inf
true
>>> ninf == ninf
true
>>> nan == nan
false
>>> inf is float("inf")
false
>>> ninf is float("-inf")
false
>>> nan is float("nan")
false
>>> inf == float("inf")
true
>>> ninf == float("-inf")
true
>>> nan == float("nan")
false

首先,对于正负无穷和 nan 自身与自身用 is 操作,结果都是 true,这里好像没有什么问题;但是如果用 == 操作,结果却不一样了, nan 这时变成了 false。如果分别用 float 重新定义一个变量来与它们再用 is 和 == 比较,结果仍然出人意料。出现这种情况的原因稍稍有些复杂,这里就不赘术了,感兴趣可以查阅相关资料。
既然我在谈论这个问题,就再忠告:不要在 python 中试图用 is 和 == 来判断一个对象是否是正负无穷或者 nan。乖乖的用 math 模块就ok了,否则就是引火烧身。