How can I represent an infinite number in python? No matter which number you enter in the program, no number should be greater than this representation of infinity.
14 Answers
In Python, you can do:
test = float("inf") In Python 3.5, you can do:
import math test = math.inf And then:
test > 1 test > 10000 test > x Will always be true. Unless of course, as pointed out, x is also infinity or "nan" ("not a number").
Additionally (Python 2.x ONLY), in a comparison to Ellipsis, float(inf) is lesser, e.g:
float('inf') < Ellipsis would return true.
2 Comments
-float("inf") to get minus infinity which is smaller than any other number.No one seems to have mentioned about the negative infinity explicitly, so I think I should add it.
For negative infinity:
-math.inf For positive infinity (just for the sake of completeness):
math.inf 3 Comments
float("inf"), math.inf, and np.inf compare? Which one to use when?float('inf') took about 185 nanoseconds, whereas the numpy and math versions both took about 70 nanoseconds. This is probably because float('inf') has to parse the string and perform some checks. This small of a time is almost always too small to optimize for, but since they are also quicker to type, I don't see why you would use the float('inf') optionThere is an infinity in the NumPy library: from numpy import inf. To get negative infinity one can simply write -inf.
2 Comments
float("inf"), math.inf, and np.inf compare? Which one to use when?np.inf requires the Numpy package. float('inf') is a bit hacky as it involves parsing a string, but on the upside it does not even require an import and the parsing is typically computationally negligible. If you use one of the math packages anyway, though, then just use them. If you happen to use both math and np, then np.inf is the shortest one.Another, less convenient, way to do it is to use Decimal class:
from decimal import Decimal pos_inf = Decimal('Infinity') neg_inf = Decimal('-Infinity') 10 Comments
Decimal('Infinity') == float('inf') returns True, so it's pretty much the same.float('inf') is float('inf') returns False toofloat('inf') is float('inf') -> False, just holds that they are different objects with different instances, but not that the internal contents are different -- actually as @nemesisdesign pointed float('int') == float('int') holds to True. This is the same problem like comparing mutable objects like [1,2,3] is [1,2,3] and [1,2,3] == [1,2,3], which are, in order, False and True.. More info see: stackoverflow.com/questions/2988017/…Infinity
1. Using float('inf') and float('-inf)
positive_infinity = float('inf') negative_infinity = float('-inf') 2. Using Python’s math module
import math positive_infinity = math.inf negative_infinity = -math.inf 3. Integer maxsize
import sys maxSize = sys.maxsize minSize = -sys.maxsize 4. Using Python’s decimal module
from decimal import Decimal positive_infinity = Decimal('Infinity') negative_infinity = Decimal('-Infinity') 5. Using Numpy Library
from numpy import inf positive_infinity = inf negative_infinity = -inf 1 Comment
sys.maxsize since we often want integers . I wish they had named it maxint instead so it would be easier to rememberIn python2.x there was a dirty hack that served this purpose (NEVER use it unless absolutely necessary):
None < any integer < any string Thus the check i < '' holds True for any integer i.
It has been reasonably deprecated in python3. Now such comparisons end up with
TypeError: unorderable types: str() < int() 2 Comments
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITYRepresenting ∞ in python
float("inf") or float("INF") or float("Inf") or float("inF") or float("infinity") or float("Infinity") creates a float object holding ∞
You can also represent -∞ in python
float("-inf") or float("-INF") or float("-Inf") or float("-infinity") creates a float object holding -∞
You can perform arithmetic operations:
infinity = float("inf") ninfinity = float("-inf") nan = float("nan") print(infinity*infinity)#inf print(ninfinity+infinity)#not a number print(1/-infinity)#is -0.0 print(nan*nan)# is not a number print(1/infinity) # is 0.0 since 1/∞ is 0 Output:
$ python3 floating.py inf nan -0.0 nan 0.0 Comments
For anyone who needs to define his own concept of a number, you could create your own class:
class Infinity(object): # equivalence def __eq__(self, other): return False # negation def __ne__(self, other): return False # less than def __lt__(self, other): return False # less than or equal def __le__(self, other): return False # greater than def __gt__(self, other): return False # greater than or equal def __ge__(self, other): return False Usage:
y = Infinity() x = -99999999999999999999 print(y > x) # False print(y < x) # False
math.infis useful as an initial value in optimisation problems, because it works correctly with min, eg.min(5, math.inf) == 5. For example, in shortest path algorithms, you can set unknown distances tomath.infwithout needing to special caseNoneor assume an upper bound9999999. Similarly, you can use-math.infas a starting value for maximisation problems.There should be one-- and preferably only one --obvious way to do it.mathstandard library or by asking thefloattype to parse the string"inf".