使用等于运算符检查无穷大是否有效?

Is it valid check for infinity with the equals operator?

提问人: 提问时间:7/15/2018 更新时间:7/15/2018 访问量:734

问:

C# 如何检查一个数字是否为无穷大

答:、等。Double.IsInfinityDouble.IsPosiviteInfinity

所以现在我的问题是:简单地做:

double d = Double.PositiveInfinity;
if(d == Double.PositiveInfinity)
{
    //
}

它似乎正在工作,但是!如果事情这么简单,为什么上述问题的答案会推荐呢?为什么要提供这种方法?Double.IsPositiveInfinity

这让我想知道通过运算符检查无穷大是否有任何警告......有吗?==

C# 浮点 相等 无穷大

评论

1赞 Mike Zboray 7/15/2018
源代码中可以看到,IsPositiveInfinity 方法正在执行相同的比较。IsInfinity 略微优化为仅通过执行位掩码和一次比较(而不是两个)来查找所需的位。我想之所以提供这些,是因为比较浮点数的精确相等是一种反模式,因为它们的精度可以根据微妙的因素而改变。此外,NaN 的语义也阻止了它。

答:

0赞 Flydog57 7/15/2018 #1

这些东西是方法,而不是属性(https://msdn.microsoft.com/en-us/library/system.double.ispositiveinfinity(v=vs.110).aspx )。据我所知,您应该像以下方式使用它们:

 if (double.IsPositiveInfinity(d)) { }

评论

0赞 Flydog57 7/17/2018
哎呀,我搞砸了。我看到你的并把它读成 ,这是我检查这种值的唯一方法。我一直使用这些方法的原因与 @mike Z 指出的原因大致相同:“因为比较浮点数以获得精确相等是一种反模式”Double.PositiveInfinitydouble.IsPositiveInfinity()