es el motivo de Double.NaN != Double.NaN
es simple:
¿Espera que 0/0
sea el mismo que Math.Sqrt(-3)
? ¿Y lo mismo que Math.Sqrt(-7)
?
Hay un error en C# en mi opinión, donde Equals()
no se reemplaza por NaN.
Assert.IsTrue(Double.NaN != Double.NaN);
Assert.IsTrue(Double.NaN.Equals(Double.NaN));
Al mismo tiempo
Assert.IsTrue(Double.PositiveInfinity == Double.NegativeInfinity);
Assert.IsTrue(Double.PositiveInfinity.Equals(Double.PositiveInfinity));
// same for Double.NegativeInfinity and Single
Uso de las funciones estáticas para Double
y Single
, por ejemplo
Double.IsNaN(value) && Double.IsInfinity(value);
O más específico:
Double.IsPositiveInfinity(value);
Double.IsNegativeInfinity(value);
Solo para explicar sus huhs: NaN es igual a nada, ni siquiera a sí mismo. Esto es por definición http://en.wikipedia.org/wiki/NaN – Falaina
Lo que creo que es desafortunado es que el contexto se ha perdido. Si tuviéramos dos dobles, y a ambos se les asignó un valor de NaN para representar el valor real 1/0. Deben ser iguales, pero dado que se pierde el contexto, se tratan como no iguales –
Tiene razón, debería implementarse una línea adicional de código para ese caso en particular. – Carlo