Причина 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));
Используйте статические функции для Doubleи Single, например
Double.IsNaN(value) && Double.IsInfinity(value);
Или более конкретно:
Double.IsPositiveInfinity(value);
Double.IsNegativeInfinity(value);