为什么在C#中浮动.NaN!= double.NaN?

Jav*_*ram 29 .net c# nan

为什么float.NaN != double.NaN

float.PositiveInfinity == double.PositiveInfinityfloat.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?
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 44

NaN永远不会等于NaN(甚至在同一类型内).因此存在IsNaN函数的原因:

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.");
}
Run Code Online (Sandbox Code Playgroud)

您还应该知道,您所显示的所有比较都不是"按原样"发生的.在编写时floatValue == doubleValue,浮点数实际上会在比较发生之前隐式转换为双精度数.


Dev*_*rre 29

可能是因为 NaN != NaN


Con*_*yer 10

引用维基百科:

与NaN进行比较时,即使与自身进行比较,也会返回无序结果.

  • 就像transact sql一样,NULL总是与NULL不同:P (2认同)