Incertezas matemáticas em Python

Olá pessoal! Costumamos usar números familiares em nossas linguagens de programação favoritas. O habitual é 1, -1,5, pi ou mesmo complexo. Mas NaN, + Inf, -Inf é usado por nós com muito menos frequência.

Nota:

No artigo, eu uso as funções elementares do Python versão 3.6.8, mas muito será relevante para outras linguagens, por exemplo, para JS.

Existem muitas situações incertas em matemática. Por exemplo, essa é uma divisão por 0.
Digitando no console

1/0 

Você receberá um erro ZeroDivisionError. Esperado, você diz? Sim Vamos tentar outro exemplo:

 0**0 

Como você sabe, 0 na potência de 0 é uma incerteza matemática clássica.
No entanto, o Python diz que este é 1. Uma pergunta razoável surge:

imagem

Por que não podemos "dar um tiro no pé" dividido por 0, mas eles relatam o resultado errado com uma ação tão indefinida?

Talvez alguém esteja indignado e grite que a resposta é simples: IEEE 754. E se não me engano, foi com a ajuda dele que concordamos que qualquer número no grau 0 é 1.

É aqui que a diversão começa. O JavaScript também suporta IEEE (0.1 + 0.2! = 0.3), mas 1/0 é infinito, não um erro de divisão por 0.

Como resultado, temos (todos os exemplos para python):

1. Erros gerados por ações incorretas

Exemplos:

 1/0 # ZeroDivisionError log(0) #ValueError 

2. Retorne valores incorretos

Um exemplo:

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

3. Retorne valores especiais:

+ -Inf, nan

Um exemplo:

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

Na minha opinião, isso é confuso.

Ainda hoje, notei um comportamento interessante do PHP:

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

Sou categoricamente contra 2 opções e provavelmente suporte 1.

Porque, como mostra o exemplo do PHP, você precisa usar inf e nan com cuidado. O que você acha?

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


All Articles