【问题标题】:Is it valid check for infinity with the equals operator?使用等于运算符对无穷大进行有效检查吗?
【发布时间】:2018-12-22 23:17:44
【问题描述】:

c# how to check if a number is infinity

答案:Double.IsInfinityDouble.IsPosiviteInfinity

所以现在我的问题来了:简单地这样做是否有效:

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

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

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

【问题讨论】:

  • 您可以在source code 中看到 IsPositiveInfinity 方法正在进行相同的比较。 IsInfinity 经过轻微优化,仅通过进行位掩码和一次比较而不是两次比较来查找必要的位。我想提供这些是因为比较浮点数是否完全相等是一种反模式,因为它们的精度可以根据微妙的因素而改变。 NaN 的语义也不鼓励它。

标签: c# floating-point equality infinity


【解决方案1】:

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

 if (double.IsPositiveInfinity(d)) { }

【讨论】:

  • 糟糕,我搞砸了。我看到了您的Double.PositiveInfinity 并将其读作double.IsPositiveInfinity(),这是我检查过这种值的唯一方法。我一直使用这些方法的原因与@mike Z 指出的大致相同:“因为比较浮点数是否完全相等是一种反模式”
猜你喜欢
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2019-02-11
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多