Incertitudes mathématiques en Python

Bonjour à tous! Nous utilisons souvent des nombres familiers dans nos langages de programmation préférés. Habituel est 1, -1,5, pi ou même complexe. Mais NaN, + Inf, -Inf est utilisé par nous beaucoup moins souvent.

Remarque:

Dans l'article, j'utilise les fonctions élémentaires de Python version 3.6.8, mais beaucoup seront pertinentes pour d'autres langages, par exemple, pour JS.

Il y a pas mal de situations incertaines en mathématiques. Par exemple, il s'agit d'une division par 0.
Saisie dans la console

1/0 

Vous obtiendrez une erreur ZeroDivisionError. Attendu, dites-vous? Oui Essayons un autre exemple:

 0**0 

Comme vous le savez, 0 à la puissance de 0 est une incertitude mathématique classique.
Cependant, Python dit qu'il s'agit de 1. Une question raisonnable se pose:

image

Pourquoi ne sommes-nous pas autorisés à «tirer dans le pied» divisé par 0, mais ils rapportent le mauvais résultat avec une action aussi indéfinie?

Peut-être que quelqu'un est indigné en ce moment et crie que la réponse est simple: IEEE 754. Et si je ne me trompe pas, c'est avec son aide que nous avons convenu que tout nombre en degré 0 est 1.

C'est là que le plaisir commence. JavaScript prend également en charge IEEE (0,1 + 0,2! = 0,3), mais 1/0 est l'infini, pas une erreur de division par 0.

En conséquence, nous avons (tous les exemples pour python):

1. Erreurs générées par des actions incorrectes

Exemples:

 1/0 # ZeroDivisionError log(0) #ValueError 

2. Renvoyer des valeurs incorrectes

Un exemple:

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

3. Renvoyer des valeurs spéciales:

+ -Inf, nan

Un exemple:

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

À mon avis, cela prête à confusion.

Aujourd'hui encore, j'ai remarqué un comportement PHP intéressant:

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

Je suis catégoriquement contre 2 options et je soutiens probablement 1.

Parce que, comme le montre l'exemple PHP, vous devez utiliser inf et nan avec prudence. Qu'en penses-tu?

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


All Articles