知识卡片
NaN破坏直觉
内容
NaN 表示无效数值,它与任何值比较都不相等,包括它自己;Inf 表示溢出方向。数值代码要显式处理这些状态,否则异常会沉默地穿过计算链路。
参考来源
- 位置:《Go语言底层原理剖析》第2章《浮点数设计原理与使用方法》2.6节《NaN与Inf》
- 结论依据:原文定义了正无穷(如1/0)、负无穷和 NaN(如0/0或Sqrt(-1)),并明确指出"在IEEE-754标准中,NaN!=NaN会返回true""对NAN的任何比较都会返回false",因此可以推出"NaN 与任何值(包括自身)比较都不相等"的结论;同时原文说明需借助 math.IsNaN、math.IsInf 函数显式判断这些异常状态。
- 原始内容:在Go语言中有正无穷(+Inf)与负无穷(-Inf)两类异常的值,例如正无穷1/0。NaN代表异常或无效的数字,例如0/0或者Sqrt(-1)……用math.NaN函数可以生成一个NaN,对NAN的任何操作都会返回NAN。另外,对NAN的任何比较都会返回false。有些时候需要判断浮点数是否为NaN或者Inf,这需要借助Math.IsNaN和Math.IsInf函数。其判断条件很简单,在IEEE-754标准中,NaN!=NaN会返回true。