Skip to content

« inf » pour infini en Python

En Python, vous pouvez utiliser inf pour l’infini.

Cet article décrit comment créer, utiliser, vérifier et comparer infinity inf.

  • Infinity inf de type float
    • Infini négatif
    • Convertir en d’autres types
  • Créer des fichiers à l’infini
    • float(‘inf’)
    • flotteur qui dépasse la valeur maximale
    • Module mathématique dans la bibliothèque standard :math.inf
    • NumPy :np.inf
  • Opérations avec infinity inf
  • Vérifiez si X est l’infini inf :==, math.isinf(), np.isinf()
    • == opérateur
    • math.isinf()
    • np.isinf(), np.isposinf(), np.isneginf(), np.isfinite()


  • Comparer avec l’infini inf
    • Comparer avec le nombre à virgule flottante float
    • Comparer avec nan
    • Comparer avec un entier int

Infinity inf de type float

En Python, le type float (nombres à virgule flottante) inclut inf, qui représente l’infini.

Vous pouvez créer inf par float(‘inf’). D’autres manières sont décrites plus loin.

f_inf = float('inf')

print(f_inf)
# inf

print(type(f_inf))
# <class 'float'>

Infini négatif

L’infini négatif peut être représenté en ajoutant – à l’infini inf.

f_inf_minus = -float('inf')

print(f_inf_minus)
# -inf

print(type(f_inf_minus))
# <class 'float'>

Convertir en d’autres types

Normalement, float peut être converti en entier int avec int(), mais inf ne peut pas être converti en int.

# print(int(f_inf))
# OverflowError: cannot convert float infinity to integer

Notez que l’entier int n’a pas de limite maximale en Python3.

inf peut être converti en la chaîne str avec str(). Il est converti en ‘inf’.

print(str(f_inf))
# inf

print(type(str(f_inf)))
# <class 'str'>

Créer des fichiers à l’infini

Il existe plusieurs façons de créer inf.

float(‘inf’)

Comme indiqué dans l’exemple ci-dessus, vous pouvez créer inf en spécifiant la chaîne ‘inf’ à float().

Vous pouvez également utiliser « infini ». Minuscules et majuscules peuvent être mélangées (insensible à la casse).

print(float('inf'))
# inf

print(float('infinity'))
# inf

print(float('INF'))
# inf

print(float('INFinity'))
# inf

flotteur qui dépasse la valeur maximale

Les nombres à virgule flottante dépassant la valeur maximale de float sont automatiquement traités comme inf.

import sys

f_inf_num = sys.float_info.max * 2

print(f_inf_num)
# inf

sys.float_info.max est utilisé pour obtenir la valeur maximale de float.

Module mathématique dans la bibliothèque standard :math.inf

Vous pouvez créer inf en tant que math.inf en important le module math de la bibliothèque standard. math.inf est également un type flottant, pas un type spécial.

import math

print(math.inf)
# inf

print(type(math.inf))
# <class 'float'>

print(float('inf') == math.inf)
# True

NumPy :np.inf

Vous pouvez également créer inf avec NumPy. np.inf est également un flottant, pas un type spécial.

import numpy as np

print(np.inf)
# inf

print(type(np.inf))
# <class 'float'>

print(float('inf') == np.inf)
# True

Opérations avec infinity inf

L’addition, la soustraction, la multiplication, la division et l’exponentiation peuvent être effectuées avec l’infini inf.

Ajout

Peu importe ce que vous ajoutez à infinity inf, le résultat est infinity inf.

print(float('inf') + 100)
# inf

print(float('inf') + float('inf'))
# inf

Soustraction

Soustrayez l’infini inf de l’infini inf pour obtenir nan. nan est également un type flottant et signifie Not a Number.

Si vous soustrayez toute autre valeur de l’infini inf, le résultat est inf.

print(float('inf') - 100)
# inf

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

print(type(float('inf') - float('inf')))
# <class 'float'>

Multiplication

L’infini inf multiplié par 0 donne nan. Si vous multipliez par n’importe quel autre nombre, vous obtenez l’infini inf.

print(float('inf') * 2)
# inf

print(float('inf') * float('inf'))
# inf

print(float('inf') * 0)
# nan

Division

L’infini inf divisé par l’infini inf est nan. Diviser 0 par l’infini inf donne 0. Si vous divisez par 0, une erreur se produit.

Sinon, le résultat est infini inf.

print(float('inf') / 2)
# inf

print(float('inf') / float('inf'))
# nan

print(0 / float('inf'))
# 0.0

# print(float('inf') / 0)
# ZeroDivisionError: float division by zero

Exponentiation

L’infini inf à la puissance 0 est 1. 1 à la puissance inf est 1. 0 à la puissance inf est 0.

Sinon, le résultat est infini inf.

print(float('inf') ** 2)
# inf

print(float('inf') ** float('inf'))
# inf

print(float('inf') ** 0)
# 1.0

print(2 ** float('inf'))
# inf

print(1 ** float('inf'))
# 1.0

print(0 ** float('inf'))
# 0.0

Vérifiez si X est l’infini inf :==, math.isinf(), np.isinf()

Utilisez des valeurs infinies et non infinies comme exemples. eXXX signifie 10 à la puissance XXX.

import math
import numpy as np

print(1e1000)
# inf

print(1e100)
# 1e+100

== opérateur

Vous pouvez vérifier si une valeur est infinie inf avec ==.

print(1e1000 == float('inf'))
# True

print(1e100 == float('inf'))
# False

Il existe plusieurs façons de créer un inf infini, mais comme ils sont tous du même type flottant, peu importe celui que vous utilisez.

print(float('inf') == math.inf == np.inf)
# True

print(1e1000 == math.inf)
# True

print(1e100 == math.inf)
# False

De plus, comme mentionné ci-dessus, de nombreux résultats arithmétiques de l’infini inf sont l’infini inf, donc l’expression suivante est également vraie.

print(float('inf') == float('inf') * 100)
# True

math.isinf()

Le module math fournit la fonction math.isinf().

math.isinf() renvoie True même pour l’infini négatif.

print(math.isinf(1e1000))
# True

print(math.isinf(1e100))
# False

print(math.isinf(-1e1000))
# True

np.isinf(), np.isposinf(), np.isneginf(), np.isfinite()

NumPy fournit np.isinf(), np.isposinf(), np.isneginf() et np.isfinite().

np.isinf() renvoie True pour l’infini positif et négatif, np.isposinf() renvoie True pour l’infini positif, np.isneginf() renvoie True pour l’infini négatif et np.isfinite() renvoie True pour les valeurs finies.

Chaque fonction accepte un objet de type tableau tel qu’un tableau NumPy ndarray ou une liste comme argument. Un ndarray dont les éléments sont True et False est renvoyé.

a = np.array([1, np.inf, -np.inf])
print(a)
# [  1.  inf -inf]

print(np.isinf(a))
# [False  True  True]

print(np.isposinf(a))
# [False  True False]

print(np.isneginf(a))
# [False False  True]

print(np.isfinite(a))
# [ True False False]

Vous pouvez également spécifier une valeur scalaire, comme math.isinf().

print(np.isinf(1e1000))
# True

np.nan_to_num(), qui remplace l’infini par n’importe quelle valeur, est également fourni.

Par défaut, les valeurs infinies sont remplacées par les plus grandes valeurs finies. Vous pouvez spécifier la valeur à remplacer pour les arguments posinf et neginf, qui ont été ajoutés dans NumPy1.17.

print(np.nan_to_num(a))
# [ 1.00000000e+000  1.79769313e+308 -1.79769313e+308]

print(np.nan_to_num(a, posinf=1e100, neginf=-1e100))
# [ 1.e+000  1.e+100 -1.e+100]

Par défaut, un nouveau ndarray est créé, mais si la copie du deuxième argument est définie sur False, le ndarray d’origine est mis à jour.

np.nan_to_num(a, copy=False)
print(a)
# [ 1.00000000e+000  1.79769313e+308 -1.79769313e+308]

Notez que np.nan_to_num() remplace également la valeur manquante nan, comme son nom l’indique. Voir l’article suivant pour plus de détails.

Comparer avec l’infini inf

Vous pouvez comparer l’infinité inf et d’autres valeurs avec des opérateurs de comparaison (>, <, etc.).

Infinity inf est comparable aux valeurs float et int, et est plus grand que n’importe lequel d’entre eux sauf nan. Tout résultat comparé à nan est Faux.

Comparer avec le nombre à virgule flottante float

Utilisez la valeur maximale de float comme exemple.

L’infini inf est supérieur à la valeur maximale de float et l’infini négatif est inférieur à la valeur minimale de float.

import sys

print(sys.float_info.max)
# 1.7976931348623157e+308

print(float('inf') > sys.float_info.max)
# True

print(-float('inf') < -sys.float_info.max)
# True

Comparer avec nan

nan est une valeur spéciale de type float, qui peut être créée avec float(‘nan’).

print(float('nan'))
# nan

print(type(float('nan')))
# <class 'float'>

La comparaison avec nan est toujours fausse.

print(float('inf') > float('nan'))
# False

print(float('inf') < float('nan'))
# False

print(float('inf') == float('nan'))
# False

Comparer avec un entier int

L’infini inf peut également être comparé à l’entier int.

print(float('inf') > 100)
# True

Puisqu’il n’y a pas de limite mac pour l’entier int en Python3, il est possible de stocker des valeurs qui dépassent la valeur maximale de float, mais l’infini inf est supérieur à une telle valeur.

large_int = int(sys.float_info.max) * 10

print(large_int)
# 1797693134862315708145274237317043567980705675258449965989174768031572607800285387605895586327668781715404589535143824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423045832369032229481658085593321233482747978262041447231687381771809192998812504040261841248583680

print(type(large_int))
# <class 'int'>

print(large_int > sys.float_info.max)
# True

print(float('inf') > large_int)
# True

Notez que les valeurs entières int inférieures à la valeur maximale de float peuvent être converties en float avec float(), mais les valeurs entières int supérieures à la valeur maximale de float ne peuvent pas être converties en float.

print(float(10**308))
# 1e+308

# print(float(10**309))
# OverflowError: int too large to convert to float