我一直以为“==”和Equals()给出双倍值相同的结果......但这不是真的
实施例
var a = Double.NaN;
Console.WriteLine(a == a);
Console.ReadKey();
打印“错误”
var a = Double.NaN;
Console.WriteLine(a.Equals(a));
Console.ReadKey();
打印“真实”!
那么,为什么浮点数的Equals()方法实现不遵循浮点数规范,这表示如果数字是NaN - 它不等于任何东西,甚至不等于它自己? < / p>
P.S我合并了我的问题,并将尽快删除另一个关于NaN的问题
P.P.S 等于实现(.NET 4,感谢Ani)
public bool Equals(double obj)
{
return ((obj == this) || (IsNaN(obj) && IsNaN(this)));
}