denvar - 6 months ago 27

Python Question

I have been looking around to find a general way of comparing two numerics in Python. In particular, I want to figure out whether they are the same or not.

The numeric types in Python are:

`int, long, float & complex`

For example, I can compare 2 integers (a type of numeric) by simply saying:

`a == b`

For floats, we have to be more careful due to rounding precision, but I can compare them within some tolerance.

We get 2 general numerics

`a`

`b`

`int`

Answer

In Python 3.5 (and in Numpy) you can use `isclose`

Read the PEP 485 that describes it, Python 3.5 math library listing and numpy.isclose for more. The numpy version works in all versions of Python that numpy is supported.

Examples:

```
>>> from math import isclose
>>> isclose(1,1.00000000001)
True
>>> isclose(1,1.00001)
False
```

The relative and absolute tolerance can be changed.

Relative tolerance can be thought of as +- a percentage between the two values:

```
>>> isclose(100,98.9, rel_tol=0.02)
True
>>> isclose(100,97.1, rel_tol=0.02)
False
```

The absolute tolerance is a absolute value between the two values. It is the same as the test of `abs(a-b)<=tolerance`

All numeric types of Python are support with the Python 3.5 version. (Use the `cmath`

version for complex)

I think longer term, this is your better bet for numerics. For older Python, just import the source. There is a version on Github.

Or, (forgoing error checking and `inf`

and `NaN`

support) you can just use:

```
abs(a-b) <= max( rel_tol * max(abs(a), abs(b)), abs_tol )
```