You almost always want to use either an absolute tolerance or a relative tolerance.
Exactly -- only the user knows what is wanted. The trick is that relative tolerance is the most-of the time choice for float compares, but it's not appropriate (or even possible) for zero.
So here we are grappling for a way to have sensible behavior at zero with otherwise relative tolerance. It's probably not possible to do so in the general case.
So we should probably simply require the user to specify either and absolute or relative tolerance and be done with it.
Nothing will be relatively close to zero except zero, which is fine, but should be mentioned in the docs.
It sounds like this is what Steven's code does. I just haven't figured out how to look at it on a phone.
-Chris
Here's why: Consider your estimated value a and your actual value b. If the estimate is taken to be the mean of a standard Gaussian distribution (the minimum assumptive distribution for a given mean and variance over the reals), then using an absolute tolerance is equivalent to verifying that the probability of observing b is within a interval with sufficient probability. Similarly, if the estimate is taken to be the mean of an standard exponential distribution (the minimum assumptive distribution for a given mean over the positive reals), then using a relative tolerance is equivalent to verifying the same thing.
You almost always want one or the other. The symmetric error that people are proposing in this thread has no intuitive meaning to me.
Best,
Neil