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:

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
2. Retorne valores incorretos
Um exemplo:
0**0
3. Retorne valores especiais:
+ -Inf, nan
Um exemplo:
inf=float('inf') inf-inf
Na minha opinião, isso é confuso.
Ainda hoje, notei um comportamento interessante do PHP:
var_dump(mt_rand(INF,INF));
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?