int i = 0, j = 0;
double nan1 = (double)0/0;
double nan2 = (double)0/0;
double nan3 = (double)i/j;
System.out.println(Double.doubleToRawLongBits(nan1) == Double.doubleToRawLongBits(nan2));
System.out.println(Double.doubleToRawLongBits(nan1) == Double.doubleToRawLongBits((double)0/0));
System.out.println(Double.doubleToRawLongBits(nan3) == Double.doubleToRawLongBits(nan2));
de salida:Confusión sobre NaN en Java
true
true
false
favor me ayude cómo se produjo la salida de true
dos primeros y false
para la última. Por favor dígame qué es el trabajo real del método Double.doubleToRawLongBits().
Se están produciendo dos 'NaN's diferentes. Uno es '0x7ff8000000000000' y el otro es' 0xfff8000000000000'. El hardware parece dar '0xfff8000000000000' para' 0/0'. Pero la propagación constante del compilador usa '0x7ff8000000000000' en su lugar. A menos que haya pasado por alto algo, esto parece un error para mí. – Mysticial
¿Qué sucede si habilita 'strictfp' para el método? – Joey
Además: »En los formatos de almacenamiento de coma flotante conformes con el estándar IEEE 754, los NaN se identifican mediante patrones de bits predefinidos específicos exclusivos de los NaN. El bit de signo no importa. «([Wikipedia] (http://en.wikipedia.org/wiki/NaN#Encoding)) – Joey