Python中的inf与nan

发布时间:2022-04-13 09:57:23 人气:50 作者:多测师

  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

Python中的inf与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了,否则就是引火烧身。

  以上内容为大家介绍了Python中的inf与nan,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注多测师。https://www.e70w.com/xwzx/


返回列表
在线客服
联系方式

热线电话

17727591462

上班时间

周一到周五

二维码
线