Comment utiliser les valeurs Infinity et NaN en Python

Vous devez créer ou tester les valeurs à virgule flottante de l’infini, de l’infini négatif ou du NaN (pas un nombre).

Python n’a pas de syntaxe particulière pour représenter ces valeurs spéciales en virgule flottante, mais elles peuvent être créées en utilisant la fonction float(). Par exemple:

>>> a = float('inf')
>>> b = float('-inf')
>>> c = float('nan')
>>> a
inf
>>> b
-inf
>>> c
nan
>>>

Pour tester la présence de ces valeurs, utilisez les fonctions math.isinf() et math.isnan(). Par exemple:

>>> math.isinf(a)
True
>>> math.isnan(c)
True
>>>

Pour des informations plus détaillées sur ces valeurs spéciales de virgule flottante, vous devriez vous référer à la spécification IEEE 754. Cependant, il y a quelques détails délicats à connaître, notamment en ce qui concerne les comparaisons et les opérateurs.

Des valeurs infinies se propageront dans les calculs d’une manière mathématique. Par exemple:

>>> a = float('inf')
>>> a + 45
inf
>>> a * 10
inf
>>> 10 / a
0.0
>>>

Toutefois, certaines opérations ne sont pas définies et donneront lieu à un résultat NaN. Par exemple:

>>> a = float('inf')
>>> a/a
nan
>>> b = float('-inf')
>>> a + b
nan
>>>

Les valeurs NaN se propagent dans toutes les opérations sans exception. Par exemple:

>>> c = float('nan')
>>> c + 23
nan
>>> c / 2
nan
>>> c * 2
nan
>>> math.sqrt(c)
nan
>>>

Une caractéristique subtile des valeurs NaN est qu’elles ne se comparent jamais comme égales. Par exemple:

>>> c = float('nan')
>>> d = float('nan')
>>> c == d
False
>>> c is d
False
>>>

Pour cette raison, la seule façon sûre de tester une valeur NaN est d’utiliser math.isnan(), comme indiqué dans ce script.

Parfois, les programmeurs veulent changer le comportement de Python pour soulever des exceptions lorsque les opérations aboutissent à un résultat infini ou NaN.

Le module fpectl peut être utilisé pour ajuster ce comportement, mais il n’est pas activé dans une compilation Python standard, il dépend de la plate-forme, et est vraiment destiné uniquement aux programmeurs de niveau expert.

Voir la documentation en ligne de Python pour plus de détails.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here