Pregunta

En Java, (Número / 0) lanza un ArithmeticException mientras (Número / 0,0) = Infinity. ¿Por qué sucede esto?

¿Fue útil?

Solución

Debido IEEE-754 de coma flotante tienen una representación para el infinito, mientras que los enteros no lo hacen.

En otras palabras, cada patrón de bits en int representa un número entero normal; valores de coma flotante son bastante más complicadas con +/- infinito, "no es un número" valores (NAN), valores normalizados, valores subnormales etc.

Otros consejos

Desde aquí

El estándar IEEE de punto flotante, el apoyo de casi todos los procesadores modernos, especifica que cada punto de operación aritmética 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. En IEEE 754 aritmética, un ÷ 0 es infinito positivo cuando a es infinito positivo, negativo cuando a es negativo, y NaN cuando a = ± 0. Los signos infinito cambian cuando dividiendo por -0 su lugar.

Entero división por cero suele ser manejado de manera diferente desde el punto flotante puesto que no hay representación de número entero para el resultado. Algunos procesadores generan una excepción cuando se hace un intento de dividir un entero entre cero, a pesar de que otros simplemente continuar y generar un resultado incorrecto para la división. El resultado depende de cómo se implementa la división, y, o bien puede ser cero, o, a veces el entero más grande posible.

También puede comprobar los JLS que dice:

15.17.2 División Operador
Por otro lado, si el valor del divisor en una división entera es 0, entonces un ArithmeticException es lanzada.

El resultado de una división en coma flotante está determinada por la especificación de IEEE aritmética: Si el resultado no es NaN, el signo del resultado es positivo si ambos operandos tienen el mismo signo, negativo si los operandos tienen signos diferentes.
División de un valor distinto de cero finito por un cero como resultado una infinidad firmado. El signo se determina por la regla indicada anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top