Infinity (inf) in Python
In Python, you can use inf to represent infinity. This article explains how to create, operate, check, and compare inf (infinity).
inf (infinity) in float type
In Python, the float type includes inf, which represents infinity.
You can create inf with float('inf'). Other methods, such as using the math module or the NumPy library, are described later.
f_inf = float('inf') print(f_inf) # inf print(type(f_inf)) # <class 'float'> Negative infinity
Negative infinity can be represented by adding - to inf.
f_inf_minus = -float('inf') print(f_inf_minus) # -inf print(type(f_inf_minus)) # <class 'float'> Convert inf to other types
While a float value can typically be converted to int using int(), inf is an exception and cannot be.
f_inf = float('inf') # print(int(f_inf)) # OverflowError: cannot convert float infinity to integer inf can be converted to the string 'inf' using str().
print(str(f_inf)) # inf print(type(str(f_inf))) # <class 'str'> Create inf
There are several ways to create inf, such as using the float() function, the math module, or the NumPy library.
float('inf')
You can create inf by specifying the string 'inf' or 'infinity' to float(). It is case-insensitive.
print(float('inf')) # inf print(float('infinity')) # inf print(float('INF')) # inf print(float('INFinity')) # inf float that exceeds the maximum value
Floating-point numbers exceeding the maximum value of float are automatically treated as inf.
import sys f_inf_num = sys.float_info.max * 2 print(f_inf_num) # inf You can use sys.float_info.max to get the maximum value of float.
Math module in the standard library: math.inf
You can create inf using math.inf. Note that math.inf is also a float, not a special type.
import math print(math.inf) # inf print(type(math.inf)) # <class 'float'> print(float('inf') == math.inf) # True NumPy: np.inf
You can also create inf with NumPy. np.inf is also a float, not a special type.
import numpy as np print(np.inf) # inf print(type(np.inf)) # <class 'float'> print(float('inf') == np.inf) # True Operations with inf
You can perform addition, subtraction, multiplication, division, and exponentiation operations with inf.
Addition
No matter what you add to inf, the result is inf.
print(float('inf') + 100) # inf print(float('inf') + float('inf')) # inf Subtraction
Subtracting inf from inf results in nan. nan is also a float type and stands for Not a Number.
If you subtract any other value from inf, the result is inf.
print(float('inf') - 100) # inf print(float('inf') - float('inf')) # nan print(type(float('inf') - float('inf'))) # <class 'float'> Multiplication
Multiplying inf by 0 results in nan. Multiplying it by any other number gives inf.
print(float('inf') * 2) # inf print(float('inf') * float('inf')) # inf print(float('inf') * 0) # nan Division
inf divided by inf is nan. Dividing 0 by inf is 0. If you divide inf by 0, an error is raised.
Otherwise, the result is 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
inf to the power of 0 is 1. 1 to the power of inf is 1. 0 to the power of inf is 0.
Otherwise, the result is 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 Check if X is inf: ==, math.isinf(), np.isinf()
In the following examples, both infinite and non-infinite values are used. Note that eXXX means 10 to the power of XXX.
print(1e1000) # inf print(1e100) # 1e+100 == operator
You can check if a value is inf using the == operator.
print(1e1000 == float('inf')) # True print(1e100 == float('inf')) # False There are several ways to create inf, but since they are all of the same float type, it doesn't matter which one you use.
import math import numpy as np print(float('inf') == math.inf == np.inf) # True print(1e1000 == math.inf) # True print(1e100 == math.inf) # False Also, as mentioned above, many arithmetic operations involving inf result in inf, so the following expression is also True.
print(float('inf') == float('inf') * 100) # True math.isinf()
The math module provides the math.isinf() function.
math.isinf() returns True for both positive and negative infinity.
import math print(math.isinf(1e1000)) # True print(math.isinf(1e100)) # False print(math.isinf(-1e1000)) # True np.isinf(), np.isposinf(), np.isneginf(), np.isfinite()
NumPy provides np.isinf(), np.isposinf(), np.isneginf(), and np.isfinite().
np.isinf()- numpy.isinf — NumPy v1.25 Manual
- Returns True for both positive and negative infinity
np.isposinf()- numpy.isposinf — NumPy v1.25 Manual
- Returns True for positive infinity
np.isneginf()- numpy.isneginf — NumPy v1.25 Manual
- Returns True for negative infinity
np.isfinite()- numpy.isfinite — NumPy v1.25 Manual
- Returns True for finite values
Each function accepts an array-like object, such as a NumPy array ndarray or a list, as an argument and returns an ndarray whose elements are True and False.
import numpy as np 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] For these functions, you can also specify a scalar value as an argument.
print(np.isinf(1e1000)) # True np.nan_to_num() is also available, allowing you to replace infinity values with any desired value.
By default, infinity values are replaced with the largest finite values. You can specify the value to replace with the posinf and neginf arguments, introduced in 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] By default, these functions create a new ndarray. However, if the second argument copy is set to False, they update the original ndarray instead.
np.nan_to_num(a, copy=False) print(a) # [ 1.00000000e+000 1.79769313e+308 -1.79769313e+308] As the name suggests, np.nan_to_num() can also replace nan. See the following article for details.
Compare values with inf
You can compare inf and other values with comparison operators (>, <, etc.).
inf is considered larger than any float or int value. However, it cannot be compared to nan: any comparison with nan yields False.
Compare with floating point number float
Use the maximum value of float as an example.
Positive infinity is greater than the maximum value of float, and negative infinity is less than the minimum value of 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 Compare with nan
nan is a special value of float, which can be created with float('nan').
print(float('nan')) # nan print(type(float('nan'))) # <class 'float'> Any comparison involving nan is always False.
print(float('inf') > float('nan')) # False print(float('inf') < float('nan')) # False print(float('inf') == float('nan')) # False Compare with integer int
inf can also be compared with int.
print(float('inf') > 100) # True In Python 3, integers (int) don't have a maximum limit. This means they can represent values greater than the maximum float value. However, inf is still considered larger than any such integer.
import sys 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 While you can convert int values to float if they are smaller than the maximum representable float value, attempting to convert larger int values will result in an error.
While you can convert int values smaller than the maximum float value using float(), you cannot for those exceeding this limit.
print(float(10**308)) # 1e+308 # print(float(10**309)) # OverflowError: int too large to convert to float