Python中的inf与nan
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了,否则就是引火烧身。
上一篇: 内容汇总(c语言)
下一篇: logging模块 旗舰版