Причина Double.NaN != Double.NaN
проста:
Ожидаете ли вы, что 0/0
будет таким же, как Math.Sqrt(-3)
? И так же, как Math.Sqrt(-7)
?
На мой взгляд, в C # есть ошибка, когда Equals()
не переопределяется для NaN.
Assert.IsTrue(Double.NaN != Double.NaN);
Assert.IsTrue(Double.NaN.Equals(Double.NaN));
В то же время
Assert.IsTrue(Double.PositiveInfinity == Double.NegativeInfinity);
Assert.IsTrue(Double.PositiveInfinity.Equals(Double.PositiveInfinity));
// same for Double.NegativeInfinity and Single
Используйте статические функции для Double
и Single
, например,
Double.IsNaN(value) && Double.IsInfinity(value);
Или более конкретно:
Double.IsPositiveInfinity(value);
Double.IsNegativeInfinity(value);