当前位置: 移动技术网 > IT编程>脚本编程>Python > Python中的inf与nan

Python中的inf与nan

2019年08月02日  | 移动技术网IT编程  | 我要评论

春晚魔术师,d3100套机镜头,宁乡洪水

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了,否则就是引火烧身。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网