[Python-ideas] Way to check for floating point "closeness"?

Chris Barker - NOAA Federal chris.barker at noaa.gov
Thu Jan 15 17:06:31 CET 2015


> On Jan 14, 2015, at 11:24 PM, Ron Adam <ron3200 at gmail.com> wrote:
>
>    (abs(a - b) / b) / units <= good

If units and good are positive, and b is negative, this fails - got to
use abs everywhere. But I'm sure both Steven and my code do that.

>  Without that you need to either scale the inputs, or scale the tolerance.

That's why we want a relative tolerance -- that scales the tolerance
for you -- that's the whole point.
> In most cases when you are entering a tolerance, you will also be working with some multiple of units. But it seems that can confuse as much as it helps.

Again, relative tolerance takes care of that for you- two values will
have the same relative error whether they are stored in angstroms or
meters -- the exponent will be wildly different, but the mantissas
will be the same, so the relative error doesn't change.

If you want to compare values In Meters According to a tolerance in
angstroms, then you a) want absolute tolerance, and b) want a when
units system.

> In any case, I was just trying to come up with some practical example,  and at the same time was thinking about how different units of measure can effect it.

Is_close(computed_value, expected_value, tolerance)

Really does what you want, provided that the inputs are in the same
units, and neither is zero. Tolerance is unitless.

I'll take a look at Steven's code it sound like it's very much like
where I was trying to go.

-Chris


>
>
>>>> By using objects we can do a bit more. I seem to recall coming
>>>> across  measurement objects some place. They keep a bit more context with them.
>
>> Sure, there are various unit/physical quantities objects out there, many
>> numpy-based. But I think is orthogonal to comparing floating point
>> numbers. >
>>
>> And a sime floating point comparison function_may_  belong the
>> standard library, but not a more complex physical quantity system
>
> Yes, for the most part I agree, but think such functions would be useful in those more complex systems as well.
>
> Ron
>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/


More information about the Python-ideas mailing list