C# 用equals运算符检查无穷大有效吗?

C# 用equals运算符检查无穷大有效吗?,c#,floating-point,equality,infinity,C#,Floating Point,Equality,Infinity,回答:Double.isnfinity,Double.isposivitinfinity,等等 现在我的问题来了:简单地做以下事情是否有效: double d = Double.PositiveInfinity; if(d == Double.PositiveInfinity) { // } 它似乎在工作,但是!如果事情就这么简单,为什么上面提到的问题的答案建议使用Double.IsPositiveInfinity?为什么要提供这种方法 这让我想知道通过=操作符检查无穷大是否有任何警告

回答:
Double.isnfinity
Double.isposivitinfinity
,等等

现在我的问题来了:简单地做以下事情是否有效:

double d = Double.PositiveInfinity;
if(d == Double.PositiveInfinity)
{
    //
}
它似乎在工作,但是!如果事情就这么简单,为什么上面提到的问题的答案建议使用
Double.IsPositiveInfinity
?为什么要提供这种方法


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

这些东西是方法,不是属性()。据我所知,你应该像这样使用它们:

 if (double.IsPositiveInfinity(d)) { }

在中可以看到IsPositiveInfinity方法正在进行相同的比较。IsInfinity略微优化,只通过执行位掩码和一次比较(而不是两次比较)来查找所需的位。我认为提供这些是因为比较浮点数是否完全相等是一种反模式,因为它们的精度可以根据细微的因素进行更改。NaN的语义学也阻止了它。哎呀,我搞砸了。我看到您的
双精度.PositiveInfinity
并将其读为
双精度.IsPositiveInfinity()
,这是我检查此类值的唯一方法。我一直使用这些方法的原因与@mike Z指出的大致相同:“因为比较浮点数是否完全相等是一种反模式。”