为什么要浮动呢C#中的double.NaN?
为什么为什么要浮动呢C#中的double.NaN?,c#,.net,nan,C#,.net,Nan,为什么float.NaN!=double.NaN 而float.PositiveInfinity==double.PositiveInfinity和float.NegativeInfinity==double.NegativeInfinity是相等的 示例: bool PosInfinity = (float.PositiveInfinity == double.PositiveInfinity); //true bool NegInfinity = (float.NegativeInfinit
float.NaN!=double.NaN
而float.PositiveInfinity==double.PositiveInfinity
和float.NegativeInfinity==double.NegativeInfinity
是相等的
示例:
bool PosInfinity = (float.PositiveInfinity == double.PositiveInfinity); //true
bool NegInfinity = (float.NegativeInfinity == double.NegativeInfinity); //true
bool isNanEqual = (float.NaN == double.NaN); //false, WHY?
可能是因为:
与NaN进行比较时,即使与自身进行比较,也始终会返回无序结果
NaN
永远不等于NaN
(即使在同一类型中)。因此,该功能存在的原因:
Double zero = 0;
// This will return true.
if (Double.IsNaN(0 / zero))
{
Console.WriteLine("Double.IsNan() can determine whether a value is not-a-number.");
}
您还应该知道,您所展示的所有比较实际上都不是“按原样”进行的。当您编写
floatValue==doubleValue
时,在进行比较之前,浮点数实际上会隐式转换为double。请给出一些数字变为NaN的示例。您注意到double.NaN!=double.NaN
也是吗?另请参见“为什么double.NaN不等于自身”就像transact-sql一样,NULL与NULL完全不同:P