谁可以给我解释一下这个?在C#中double.NaN不等于double.NaN
bool huh = double.NaN == double.NaN; // huh = false
bool huh2 = double.NaN >= 0; // huh2 = false
bool huh3 = double.NaN <= 0; // huh3 = false
我可以将哪个常量与double.NaN进行比较,然后得出真值?
谁可以给我解释一下这个?在C#中double.NaN不等于double.NaN
bool huh = double.NaN == double.NaN; // huh = false
bool huh2 = double.NaN >= 0; // huh2 = false
bool huh3 = double.NaN <= 0; // huh3 = false
我可以将哪个常量与double.NaN进行比较,然后得出真值?
NULL
在SQL中一样
Answers:
如果您很好奇,这是Double.IsNaN
这样的:
public static bool IsNaN(double d)
{
return (d != d);
}
时髦,是吗?
public const double NaN = (double) 1.0 / (double) 0.0;
public const double NaN = (double)0.0 / (double)0.0;
参考源的链接。感谢您指出了这一点。另一个需要注意的是:错误和说谎是两件完全不同的事情
使用Double.IsNan()在此处测试是否相等。原因是NaN不是数字。
我们对NaN唯一了解的是“不是数字”。这并不意味着它具有与其状态相关联的值。例如:
∞+(-∞)= NaN
0/0 = NaN
(∞+(-∞))<>(0/0)
这是一些C#演示
var infinity = 100d / 0;
var negInfinity = -100d / 0;
var notANumber = infinity + negInfinity;
Console.WriteLine("Negative Infinity plus Infinity is NaN: {0}", double.IsNaN(notANumber));
var notANumber2 = 0d / 0d;
Console.WriteLine("Zero divided by Zero is NaN: {0}", double.IsNaN(notANumber2));
Console.WriteLine("These two are not equal: {0}", notANumber == notANumber2);
的原因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));
// same for Double.NegativeInfinity and Single
对Double
和使用静态函数Single
,例如
Double.IsNaN(value) && Double.IsInfinity(value);
或更具体:
Double.IsPositiveInfinity(value);
Double.IsNegativeInfinity(value);
相等运算符认为两个NaN值彼此不相等。通常,尽管可以使用比较方法(例如Equals和CompareTo),但Double运算符不能用于将Double.NaN与其他Double值进行比较。见下面的例子
从msdn引用
class Program
{
static void Main(string[] args)
{
Double i = Double.NaN;
while (!i.Equals(i)) //this would be result in false
//while(i != i) // this would result in true.
{
Console.WriteLine("Hello");
}
}
}
这是.net小提琴一样。