Muchos problemas en programación están relacionados con operaciones matemáticas y la primera y esencial a resolver es la división por cero. Como bien sabemos un número dividido por cero da infinito, pero como este término es un tanto abstracto en computación, lo que se hace es determinar un valor numérico muy grande, tan grande cuya aplicación este fuera del computo usual que un ser humano esté dispuesto a calcular. Cuato puede calcular Javascript?
Este número en Javascript es 1.7976931348623157E+308.
Un número con 300 ceros a su derecha podríamos considerarlo suficientemente grande como para realizar cualquier cálculo. Este limite es el resultado de utilizar una codificación de 1024 bits y su valor máximo es 2^1024 que es igual a 1.7976931348623157E+308.
En el caso de que sumemos , multipliquemos este número no obtendremos mayor resultado que este, ya que los bits están limitados. Pero que ocurrirá si restamos o tenemos una indeterminación?
Vamos a ponerlo a prueba.
console.log(1/0); /*Infinity*/ console.log(1/Math.cos(Math.PI/2)); /*Infinity*/ console.log(1.7976931348623157E+308); /*Infinity*/ console.log(1/0 - 1.7976931348623157E+308); /*Infinity*/ console.log(1/0 - 1/0); /*NaN*/
Se pueden probar muchas combinaciones más pero ya aviso que la resolución de indeterminaciones no da buenos resultados. Como se observar en el ejemplo se puede apreciar que el valor que ofrece la división por cero es un infinito mayor que el valor numérico escrito a mano. Por otra lado la diferencia de infinitos nos ofrece un valor NaN y esto nos informa de que el valor de salida no es un número.
Aún así haciendo pruebas hemos llegado a un agujero negro dentro de Javascript que es el resultado siguiente:
x=(1/0 - 1/0); /*Guardamos en una variable el valor resultado de la indeterminación*/ console.log(x); /*NaN*/ console.log(typeof(x)); /*number*/
Una contradicción en si misma en donde tenemos en una misma variable, algo desconocido que no es un número pero es de tipo número. Llegados a este punto podemos apreciar la poca confianza que nos ofrecen los lenguajes de programación no tipados, pero de todas maneras sigue siendo una buena herramienta web.
Yo por mi parte no me dedicaría ni a resolver ecuaciones de segundo grado. Principalmente porque no existen los número complejos. (a menos que utilicemos un framework que declare la clase complejo como Math.js, CUIDADO: Este framework no es el mismo que el que viene por defecto).