Pregunta

No soy matemático, pero supongo que dividir por infinito es una mala matemática o, al menos, poco práctica.

Acabo de pasar media hora depurando mi javascript que estaba funcionando perfectamente bien en Firefox pero me estaba dando un error en IE. Finalmente me di cuenta de que era porque, en ciertos escenarios, le pedía a IE que dividiera por infinito.

Entonces, lo arreglé, pero tengo curiosidad por saber por qué Firefox estaba de acuerdo con eso. Es cierto que esto podría ser más una cuestión matemática que de programación. ;)

¿Fue útil?

Solución

Creo que es un error en IE. De acuerdo con las reglas de IEEE math, n / Inf = 0 (para n! = 0). Por lo tanto, si IE hace alarde de esto, es un problema en IE. Por otro lado, usar Inf en operaciones matemáticas ordinarias es problemático, y sería mejor que tu código no dependiera de él en primer lugar.

¿Por qué es peligroso? Bueno, para empezar, según IEEE 754:

1/0 = Inf
1/-0 = -Inf

pero sabemos que 0 = -0, por lo tanto

Inf = -Inf

que obviamente es indeseable. IEEE no tenía la intención de hacer de Inf un número ordinario de todos modos. Inf y NaN existen para hacer que la aritmética de punto flotante en las computadoras con su inherente precisión limitada y los problemas de desbordamiento se asemejen a la aritmética del mundo común, donde, para dar el ejemplo más simple, el conjunto de números reales se cierra de manera adicional (agregar dos números reales siempre resulta en otro número real). Si lo hace con flotadores de precisión finita, obtendrá casos en los que agregar dos números resultará en un desbordamiento. Para evitar tener que tratar esto como una condición de error, IEEE introdujo dos símbolos adicionales, Inf y NaN, y un conjunto de reglas para su comportamiento. Ahora, el resultado de una operación matemática es siempre un número, o Inf, o NaN, y si el resultado tiene algún sentido o no se deja al usuario.

Otros consejos

La división por el infinito está bien, es cero.

A menos que estés dividiendo el infinito por el infinito, que no está definido (al menos en general)

La división de un número por el infinito es perfectamente razonable desde una perspectiva matemática. Es un número infinitamente cercano a cero, sin llegar a cero.

Desde una perspectiva de software, esto es mucho más difícil, ya que el infinito no es un valor discretamente representable. Mi conjetura sería que su diferencia de comportamiento se basa en decisiones de diseño.

En Firefox, probablemente optaron por devolver un valor de cero, ya que para todos los propósitos prácticos, este resultado funcionará para lo que necesites.

En IE, por otro lado, parece que los desarrolladores tomaron la decisión consciente de no permitirle realizar un cálculo para el que sabían que no podían dar una respuesta discreta.

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