Я наткнулся на определение .NET double.NaN
в коде:
public const double NaN = (double)0.0 / (double)0.0;
Это делается аналогично в PositiveInfinity
и NegativeInfinity
.
double.IsNaN
(с удалением нескольких прагм и комментариев) определяется как:
[Pure]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static bool IsNaN(double d)
{
if (d != d)
{
return true;
}
else
{
return false;
}
}
Это очень нелогично для меня.
Почему NaN определяется как деление на ноль? Как 0.0 / 0.0
представляется "за кадром"? Как деление на 0 возможно в double
и почему NaN != NaN
?