Salida del código de abajo me confunde. ¿Por qué NaN
a veces y otras veces Infinity?
public static void main (String[] args) {
double a = 0.0;
double b = 1.0;
int c = 0;
System.out.println(a/0.0);
System.out.println(a/0);
System.out.println(b/0.0);
System.out.println(b/0);
System.out.println(c/0.0);
System.out.println(c/0);
}
Salidas es:
NaN
NaN
Infinity
Infinity
NaN
Exception in thread "main" java.lang.ArithmeticException: / by zero
¿Cuál es el factor decisivo aquí?
Esto es debido a la Norma IEEE para aritmética de punto flotante (IEEE 754) , que es una norma técnica para el cálculo de coma flotante establecida en 1985 por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE).
El propósito:
El estándar de punto flotante IEEE, .. especifica que cada operación aritmética de punto flotante, incluyendo la división por cero, tiene un resultado bien definido . Los soportes estándar firmados cero, así como el infinito y NaN (no un número). Hay dos ceros: 0 (cero positivo) y -0 (negativos cero), y esto elimina cualquier ambigüedad cuando se divide .
La regla:
En IEEE 754 aritmética,
a ÷ +0
es infinito positivo cuandoa
es positivo , infinito negativo cuandoa
es negativo , y NaN cuandoa = ±0.