Kann mir das jemand erklären? In C # ist double.NaN nicht gleich double.NaN
bool huh = double.NaN == double.NaN; // huh = false
bool huh2 = double.NaN >= 0; // huh2 = false
bool huh3 = double.NaN <= 0; // huh3 = false
Welche Konstante kann ich mit einem double.NaN vergleichen und wahr werden?
NULL
in SQLAntworten:
Wenn Sie neugierig sind,
Double.IsNaN
sieht das so aus:Funky, was?
quelle
public const double NaN = (double) 1.0 / (double) 0.0;
public const double NaN = (double)0.0 / (double)0.0;
Link zur Referenzquelle . Vielen Dank für den Hinweis. Noch ein Hinweis: Unrecht und Lügen sind zwei völlig verschiedene DingeVerwenden Sie Double.IsNaN .
quelle
quelle
Das Verhalten ist absichtlich. Der Grund dafür, dass NaN etwas ist, das keine Zahl ist und daher für viele Dinge eine Art Allheilmittel ist.
Der richtige Weg, etwas mit NaN zu vergleichen, ist die Verwendung der IsNaN- Funktion.
quelle
Verwenden Sie Double.IsNan () , um hier die Gleichheit zu testen. Der Grund ist, dass NaN keine Zahl ist.
quelle
Hierfür gibt es eine spezielle Funktion:
quelle
Verwenden Sie die Methode "Double.IsNaN (Wert)", um diese Bedingung zu überprüfen.
quelle
Tatsächlich haben Sie bereits den Weg gefunden, um zu überprüfen, ob eine IEEE-754-Gleitkommazahl NaN ist : Dies ist der einzige Gleitkommawert (oder Wertebereich, da es mehrere NaNs gibt), der im
False
Vergleich zu sich selbst ausgewertet wird , dh:Unter der Haube könnte die Double.IsNaN-Methode tatsächlich dasselbe tun. Sie sollten es trotzdem verwenden, da das Verhalten für jeden, der den FP-Standard nicht kennt, ziemlich überraschend ist.
quelle
Das einzige, was wir über NaN wissen, ist, dass es "keine Zahl" ist. Das bedeutet nicht, dass es einen Wert hat, der mit seinem Status verknüpft werden kann. Beispielsweise:
∞ + (-∞) = NaN
0/0 = NaN
(∞ + (-∞)) <> (0/0)
Hier ist ein C # zum Demonstrieren
quelle
Der Grund dafür
Double.NaN != Double.NaN
ist einfach:Erwarten Sie
0/0
das Gleiche wieMath.Sqrt(-3)
? Und das gleiche wieMath.Sqrt(-7)
?Meiner Meinung nach gibt es einen Fehler in C #, der
Equals()
für NaN nicht überschrieben wird.Gleichzeitig
Verwenden Sie statische Funktionen für
Double
undSingle
, zOder genauer:
quelle
Referenziert von msdn
Hier ist .net Geige für das gleiche.
quelle