誰かが私にこれを説明できますか?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と比較して、真になる定数はどれですか?
NULLSQLと同じです
回答:
興味がある場合は、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; には参照ソースへのリンクを言っています。それを指摘してくれてありがとう。別のノートで:間違っていると横たわっていることは2つの完全に異なるものです
Double.IsNaNを使用します。
ここでDouble.IsNan()を使用して同等性をテストします。その理由は、NaNが数値ではないためです。
実際、IEEE-754浮動小数点数がNaNであるかどうかを確認する方法はすでに見つかりました。これは、Falseそれ自体と比較した場合に評価される唯一の浮動小数点値(または複数のNaNがあるため、値の範囲)です。
bool isNaN(double v) {
return v != v;
}
内部的には、Double.IsNaNメソッドは実際には同じことを行う可能性があります。FP標準について知らない人にとっては、その動作は非常に驚くべきものであるため、引き続き使用する必要があります。
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)?と同じ
私の意見でEquals()は、NaNでオーバーライドされないバグがC#にあります。
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);
等式演算子は、2つのNaN値が互いに等しくないと見なします。一般に、Double演算子を使用してDouble.NaNを他のDouble値と比較することはできませんが、比較方法(EqualsやCompareToなど)は使用できます。以下の例を参照してください
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フィドルです。