[Numpy-discussion] Testing for close to zero?
Mon Jan 19 23:48:34 CST 2009
On Mon, Jan 19, 2009 at 23:36, Charles R Harris
> On Mon, Jan 19, 2009 at 9:17 PM, Robert Kern <firstname.lastname@example.org> wrote:
>> On Mon, Jan 19, 2009 at 22:09, Charles R Harris
>> <email@example.com> wrote:
>> > On Mon, Jan 19, 2009 at 7:23 PM, Jonathan Taylor
>> > <firstname.lastname@example.org> wrote:
>> >> Interesting. That makes sense and I suppose that also explains why
>> >> there is no function to do this sort of thing for you.
>> > A combination of relative and absolute errors is another common
>> > solution,
>> > i.e., test against relerr*max(abs(array_of_inputs)) + abserr. In cases
>> > like
>> > this relerr is typically eps and abserr tends to be something like
>> > 1e-12,
>> > which keeps you from descending towards zero any further than you need
>> > to.
>> I don't think the absolute error term is appropriate in this case. If
>> all of my inputs are of the size 1e-12, I would expect a result of
>> 1e-14 to be significantly far from 0.
> Sure, that's why you *chose* constants appropriate to the problem.
But that's what eps*max(abs(array_of_inputs)) is supposed to do.
In the formulation that you are using (e.g. that of
assert_arrays_almost_equal()), the absolute error comes into play when
you are comparing two numbers in ignorance of the processes that
created them. The relative error in that formula is being adjusted by
the size of the two numbers (*not* the inputs to the algorithm). The
two numbers may be close to 0, but the relevant inputs to the
algorithm may be ~1, let's say. In that case, you need the absolute
error term to provide the scale information that is otherwise not
present in the comparison.
But if you know what the inputs to the calculation were, you can
estimate the scale factor for the relative tolerance directly
(rigorously, if you've done the numerical analysis) and the absolute
tolerance is supernumerary.
"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
More information about the Numpy-discussion