
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
