为何比较NaN时不能使用==运算符?
为什么NaN不能用==运算符比较?
这是由IEEE 754浮点数标准明确规定的行为:
- NaN(Not a Number)代表无效或未定义的数值结果,比如0除以0、负数开平方这类操作的输出。
- 标准规定,任何涉及NaN的相等性比较(包括NaN和自身比较)都必须返回False——因为NaN本身不代表确定的数值,无法判定它和任何值(包括自己)是否相等。
看你给出的代码示例:
a = float("NaN") a == float("NaN") # 输出False
两个NaN都是无效数值,按标准不能判定为相等,因此返回False。
而np.isnan(a)返回True,是因为这个函数是专门用于检测NaN的工具,它直接判断浮点数是否符合NaN的编码格式,而非进行相等性比较,完全贴合IEEE 754的检测规则。
内容的提问来源于stack exchange,提问作者Luis P
相关产品推荐
相关产品推荐

