Published: 18 March 2021, 18:00

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
```