Comment représenter un nombre infini en python? Quel que soit le nombre que vous entrez dans le programme, aucun nombre ne doit être supérieur à cette représentation de l'infini.
Comment représenter un nombre infini en python? Quel que soit le nombre que vous entrez dans le programme, aucun nombre ne doit être supérieur à cette représentation de l'infini.
Réponses:
En Python, vous pouvez faire:
test = float("inf")
En Python 3.5, vous pouvez faire:
import math
test = math.inf
Et alors:
test > 1
test > 10000
test > x
Sera toujours vrai. Sauf bien sûr, comme indiqué, x est aussi infini ou "nan" ("pas un nombre").
De plus (Python 2.x UNIQUEMENT), par rapport à Ellipsis
, float(inf)
est moindre, par exemple:
float('inf') < Ellipsis
reviendrait vrai.
Ellipsis
, ce qui se compare plus que tout, y compris l'infini. float("inf") < Ellipsis
renvoie True
math.inf < ...
ou float('inf') > Ellipsis
jette un TypeError: unorderable types: float() < ellipsis()
, au moins pour moi.
Je ne sais pas exactement ce que vous faites, mais float("inf")
vous donne un flottant Infinity, qui est supérieur à tout autre nombre.
Il y a une infinité dans la bibliothèque NumPy: from numpy import inf
. Pour obtenir l'infini négatif, il suffit d'écrire -inf
.
Une autre façon, moins pratique, de le faire est d'utiliser la Decimal
classe:
from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Decimal('Infinity') == float('inf')
revient True
, donc c'est à peu près la même chose.
float('inf') is float('inf')
revient False
aussi
float('inf') is float('inf')
-> False
, juste soutient que ce sont des objets différents avec différentes instances, mais pas que le contenu interne sont différentes - en fait comme @nemesisdesign pointu float('int') == float('int')
tient à True
. C'est le même problème que de comparer des objets mutables comme [1,2,3] est [1,2,3] et [1,2,3] == [1,2,3], qui sont, dans l'ordre, Faux and True .. Plus d'informations voir: stackoverflow.com/questions/2988017/…
Dans python2.x, il y avait un hack sale qui servait à cet effet (NE JAMAIS l'utiliser sauf si absolument nécessaire):
None < any integer < any string
Ainsi, la vérification i < ''
est valable True
pour tout entier i
.
Il a été raisonnablement déprécié en python3. Maintenant, ces comparaisons se retrouvent avec
TypeError: unorderable types: str() < int()
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
De plus, si vous utilisez SymPy, vous pouvez utiliser sympy.oo
>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
etc.
math.inf
est utile comme valeur initiale dans les problèmes d'optimisation, car il fonctionne correctement avec min, par exemple.min(5, math.inf) == 5
. Par exemple, dans les algorithmes de chemin le plus court, vous pouvez définir des distances inconnues àmath.inf
sans avoir besoin de cas particulierNone
ou supposer une limite supérieure9999999
. De même, vous pouvez utiliser-math.inf
comme valeur de départ pour les problèmes de maximisation.