number - En JavaScript, ¿por qué el cero dividido por cero devuelve NaN, pero cualquier otro dividido por cero devuelve Infinity?
nan javascript parseint (3)
Además de las respuestas basadas en el concepto matemático de cero, hay una consideración especial para los números de coma flotante. Cada resultado de subdesbordamiento, cada número distinto de cero cuya magnitud absoluta es demasiado pequeña para representar como un número distinto de cero, se representa como cero.
0/0 puede ser realmente 1e-500 / 1e-600, o 1e-600 / 1e-500, o muchas otras relaciones de valores muy pequeños.
La relación real podría ser cualquier cosa, por lo que no hay una respuesta numérica significativa, y el resultado debería ser un NaN.
Ahora considera 1/0. No importa si el 0 representa 1e-500 o 1e-600. De todos modos, la división se desbordará y el resultado correcto es el valor utilizado para representar desbordamientos, Infinito.
Me parece que el código
console.log(1 / 0)
debería devolver NaN
, pero en su lugar devuelve Infinity
. Sin embargo, este código:
console.log(0 / 0)
devuelve NaN
. ¿Alguien puede ayudarme a comprender el razonamiento de esta funcionalidad? No solo parece ser inconsistente, también parece estar mal, en el caso de x / 0
donde x !== 0
Me doy cuenta de que esto es antiguo, pero creo que es importante tener en cuenta que en JS también hay un -0
que es diferente de 0
o +0
que hace que esta característica de JS sea mucho más lógica que a primera vista.
1 / 0 -> Infinity
1 / -0 -> -Infinity
que lógicamente tiene sentido, ya que en el cálculo, la razón por la que se divide por 0 no está definida es únicamente porque el límite izquierdo va al infinito negativo y el límite derecho al infinito positivo. Como -0
y 0
son objetos diferentes en JS, tiene sentido aplicar el 0 positivo para evaluar el Infinity
positivo y el 0 negativo para evaluar el Infinity
negativo.
Esta lógica no se aplica a 0/0
, que es indeterminado. A diferencia de 1/0
, podemos obtener dos resultados tomando límites por este método con 0/0
lim h->0(0/h) = 0
lim h->0(h/0) = Infinity
que por supuesto es inconsistente, por lo que resulta en NaN
Porque así es como se define el punto flotante (más en general que solo Javascript). Ver por ejemplo:
En términos generales, se podría pensar en 1/0 como el límite de 1 / x ya que x tiende a cero. Y 0/0 no tiene ninguna interpretación razonable en absoluto, de ahí NaN.