【问题标题】:Why is float('nan') not equal to itself in python [duplicate]为什么在python中float('nan')不等于自身[重复]
【发布时间】:2021-04-29 21:38:45
【问题描述】:
In [6]: a = float('nan')

In [7]: a == a
Out[7]: False

为什么?

【问题讨论】:

  • 因为NaN != NaN
  • @cᴏʟᴅsᴘᴇᴇᴅ 不是真的。他问的是为什么他们以某种方式行事,而不是如何他们以某种方式行事。
  • @ChristianDean 然后他需要访问math.stackexchange.com
  • 正确的测试可能是math.isnan(a)
  • @cᴏʟᴅsᴘᴇᴇᴅ 那,我倾向于同意你的观点。他所问的实际上并不特定于任何编程语言。这就是大多数语言实现NaN 的方式。

标签: python


【解决方案1】:

有两个原因,一个是实际的,一个是历史的。历史原因是这使得测试 NaN 变得微不足道。如果值不等于自身,则为 NaN。

实际原因是NaN用于表示值未定义的各种不同情况,并非所有未定义值都相等。

NaN/NaN 应该等于 1 吗?想想那会是多么疯狂。争论 NaN 应该等于自己只是不那么疯狂了。

【讨论】:

  • 有趣。对于您的 NaN/NaN 是否应该等于 1 的问题?我想我会给出的答案是:根本不允许除以 NaN,因为它不代表数字,就像除以字符串或其他东西一样
  • @nichochar 通常禁止某事的方式是让它返回一个NaN。你到底在暗示什么?
  • NaN / NaN -> NaN?
  • 是的。这允许NaN 通过一系列计算“冒泡”,因此您只需测试NaN 的最终结果。
  • 我很好奇math.isnan 是否会被简单地定义为return a != a(不是)。
猜你喜欢
  • 2012-04-19
  • 2011-11-10
  • 2010-11-11
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多