Il motivo di Double.NaN != Double.NaN
è simple:
Ti aspetti che lo 0/0
sia lo stesso di Math.Sqrt(-3)
? E lo stesso di Math.Sqrt(-7)
?
C'è un errore in C# a mio avviso, dove Equals()
non è sovrascritto per NaN.
Assert.IsTrue(Double.NaN != Double.NaN);
Assert.IsTrue(Double.NaN.Equals(Double.NaN));
Contemporaneamente
Assert.IsTrue(Double.PositiveInfinity == Double.NegativeInfinity);
Assert.IsTrue(Double.PositiveInfinity.Equals(Double.PositiveInfinity));
// same for Double.NegativeInfinity and Single
Usa funzioni statiche per Double
e Single
, ad esempio
Double.IsNaN(value) && Double.IsInfinity(value);
o più specifiche:
Double.IsPositiveInfinity(value);
Double.IsNegativeInfinity(value);
Solo per spiegare il tuo huh: NaN è uguale a niente, nemmeno a se stessa. Questo è per definizione. http://en.wikipedia.org/wiki/NaN – Falaina
Quello che penso sia sfortunato è che il contesto è perso. Se avessimo due doppi, ad entrambi è stato assegnato un valore di NaN per rappresentare il valore reale 1/0. Dovrebbero essere uguali, ma dal momento che il contesto è stato perso, sono considerati non uguali –
Hai ragione, dovrebbe essere implementata una linea aggiuntiva di codice per quel particolare caso. – Carlo