Incertidumbres Matemáticas en Python

Hola a todos! A menudo usamos números familiares en nuestros lenguajes de programación favoritos. Habitual es 1, -1.5, pi o incluso complejo. Pero NaN, + Inf, -Inf lo usamos con mucha menos frecuencia.

Nota:

En el artículo, uso las funciones elementales de Python versión 3.6.8, pero mucho será relevante para otros lenguajes, por ejemplo, para JS.

Hay muchas situaciones inciertas en matemáticas. Por ejemplo, esta es una división por 0.
Escribiendo en la consola

1/0 

Obtendrá un error ZeroDivisionError. Esperado, dices? Si Probemos con otro ejemplo:

 0**0 

Como saben, 0 a la potencia de 0 es una incertidumbre matemática clásica.
Sin embargo, Python dice que esto es 1. Surge una pregunta razonable:

imagen

¿Por qué no se nos permite "disparar en el pie" dividido por 0, pero informan el resultado incorrecto con una acción tan indefinida?

Quizás alguien está indignado en este momento y grita que la respuesta es simple: IEEE 754. Y si no me equivoco, fue con su ayuda que acordamos que cualquier número en el grado 0 es 1.

Aquí es donde comienza la diversión. JavaScript también es compatible con IEEE (0.1 + 0.2! = 0.3), pero 1/0 es infinito, no una división por 0 error.

Como resultado, tenemos (todos los ejemplos para python):

1. Errores generados por acciones incorrectas

Ejemplos:

 1/0 # ZeroDivisionError log(0) #ValueError 

2. Devuelve valores incorrectos

Un ejemplo:

 0**0 #1 1**inf #1.0 

3. Devuelve valores especiales:

+ -Inf, nan

Un ejemplo:

 inf=float('inf') inf-inf #nan 

En mi opinión esto es confuso.

Justo hoy, noté un comportamiento interesante de PHP:

 var_dump(mt_rand(INF,INF)); //  INF  INF - NULL?? //        false. 

Estoy categóricamente en contra de 2 opciones y probablemente soporte 1.

Porque, como muestra el ejemplo de PHP, debe usar inf y nan con precaución. Que piensas

Source: https://habr.com/ru/post/454352/


All Articles