float (IEEE 754)
Floating point numbers in Python and most of the modern languages are implemented according to IEEE 754. The most interesting and hardcore part is "arithmetic formats" which defines a few special values:
inf
and-inf
representing infinity.nan
representing a special "Not a Number" value.-0.0
representing "negative zero"
Negative zero is the easiest case, for all operations it considered to be the same as the positive zero:
-.0 == .0 # True
-.0 < .0 # False
Nan returns False for all comparison operations (except !=
) including comparison with inf:
import math
math.nan < 10 # False
math.nan > 10 # False
math.nan < math.inf # False
math.nan > math.inf # False
math.nan == math.nan # False
math.nan != 10 # True
And all binary operations on nan return nan:
math.nan + 10 # nan
1 / math.nan # nan
You can read more about nan in previous posts:
Infinity is bigger than anything else (except nan). However, unlike in pure math, infinity is equal to infinity:
10 < math.inf # True
math.inf == math.inf # True
The sum of positive and negative infinity is nan:
-math.inf + math.inf # nan