** Python learning output. ** **

The math module has a `.isclose () function`

.
Used when comparing float type numerical values. Whether each is an approximation.

```
>>> import math
>>> math.isclose(0.1+0.1+0.1, 0.3)
True
```

As a general premise, computer hardware, including Python, cannot accurately represent floating point numbers. Since it is expressed as a binary fraction, for example, a binary fraction

```
0.001
```

Is

```
0/2 + 0/4 + 1/8
```

It becomes the value.

However, most decimals cannot be accurately represented as binary fractions, so approximate values are stored.

To get the exact value of the float type, use the `float.as_integer_ratio ()`

method. Substituting 3 for x and using this method to express the exact value as a rational number ...

```
>>> x = 0.3
>>> x.as_integer_ratio()
(5404319552844595, 18014398509481984)
>>> x == 5404319552844595 / 18014398509481984
True
>>> 5404319552844595 / 18014398509481984
0.3
```

Somehow amazing.

Now substitute 0.1 for x and multiply by 3. Then

```
>>> x = 0.1
>>> x.as_integer_ratio()
(3602879701896397, 36028797018963968)
>>> 3602879701896397 / 36028797018963968
0.1
>>> 3602879701896397 / 36028797018963968 * 3
0.30000000000000004
```

like this. Therefore, the conditional expression of `0.1 + 0.1 + 0.1 == 0.3`

does not hold.

However, `0.30000000000000004`

can be said to be an approximation of` 0.3`

. Therefore, as mentioned above,

```
>>> import math
>>> math.isclose(0.1+0.1+0.1, 0.3)
True
```

The `.isclose () function`

returns True.

reference Official Python documentation: 15. Floating Point Arithmetic, Its Problems and Limitations

Recommended Posts