[Python-ideas] Floating point "closeness" Proposal Outline

Steven D'Aprano steve at pearwood.info
Tue Jan 20 11:40:12 CET 2015


On Mon, Jan 19, 2015 at 08:10:35PM -0800, Neil Girdhar wrote:

> If you decide to invent a relative error function, 

The error functions we have been talking about are hardly "invented". 
They're mathematically simple and obvious, and can be found in just 
about any undergraduate book on numerical computing:

- The absolute error between two quantities a and b is the 
  absolute difference between them, abs(a-b). 

- The relative error is the difference relative to some 
  denominator d, abs(a-b)/abs(d), typically with d=a or d=b. 

If you happen to know that b is the correct value, then it is common to 
choose b as the denominator. If you have no a priori reason to think 
either a or b is correct, or if you prefer a symmetrical function, a 
common choice is to use d = min(abs(a), abs(b)).

See, for example:

http://mathworld.wolfram.com/AbsoluteError.html
http://mathworld.wolfram.com/RelativeError.html


> my suggestion is: 
> (a-b)/b + log(b/a), which is nonnegative, zero only at equality, and 
> otherwise penalizes positive a for being different than some target 
> positive b.  To me, it seems like guessing b using 1.9b is better than 
> guessing it as 0.1b, and so on.  This corresponds to exponential KL 
> divergence, which has a clear statistical meaning, but only applies to 
> positive numbers.

Do you have a reference or derivation for this? I'm happy to admit that 
I'm no Knuth or Kahan, but I've read a bit of numerical computing[1] and 
I've never seen anyone add a log term. I'm not even sure why you would 
do so.



[1] I know just enough to know how much I don't know.

-- 
Steve


More information about the Python-ideas mailing list