【发布时间】:2014-07-11 12:15:41
【问题描述】:
使用Double.PositiveInfinity 作为参数调用Double.IsNaN() 时,结果为假。这违背了我的直觉,因为无穷大不是一个数字。显然“NaN”仅以.NET 中的常量形式存在,这是由 IEEE 标准描述的还是自定义实现细节?是否有比以下更短的方法来检查 Double 是否为“NaN”:
(Double.IsNaN(d) || Double.IsPositiveInfinity(d) || Double.IsNegativeInfinity(d))
或
(Double.IsNaN(d) || Double.IsInfinity(d))
【问题讨论】:
-
除非您只是创建自己的自定义包装函数,否则不会期望它变得更短。
-
NaN 在 IEEE 标准中有所描述,是的(实际上它稍微复杂一些,具有相当的 NaN 和信令 NaN)。它是浮点数的可能值,而不是“除了普通旧数字之外的任何东西”的类别。
-
我很少遇到应该以相同方式处理 NaN 和无穷大的情况。许多计算工作正常,并得到有意义的结果,数据中的无穷大。在广泛使用 IsNanOrInfinity 函数之前,请仔细查看它是否真的对您的计算有意义。
-
@PatriciaShanahan - 幸运的是我没有做任何浮点计算。我正在验证两个代表
Double.MinValue和Double.MaxValue之间范围的双精度数。据我所知,它们中的任何一个都是 NaN 没有意义。 -
你能接受 Roman Marusyk 的回答是正确的吗?从 .net 5 开始,接受的答案已经过时了。
标签: c# .net floating-point