[Numpy-discussion] Testing for close to zero?

Robert Kern robert.kern at gmail.com
Mon Jan 19 15:55:39 EST 2009


On Mon, Jan 19, 2009 at 14:43, Jonathan Taylor
<jonathan.taylor at utoronto.ca> wrote:
> Hi,
>
> When solving a quadratic equation I get that alpha =
> -3.78336776728e-31 which I believe to be far below machine precision:
>
> finfo(float).eps
> 2.2204460492503131e-16
>
> But an if statement like:
>
> if alpha == 0:
>   ...
>
> does not catch this.  Is there a better way to check for things that
> are essentially zero or should I really be using
>
> if np.abs(alpha) < finfo(float).eps:
>   ...

Almost. You should scale eps by some estimate of the size of the
problem. Exactly how you should do this depends on the problem,
though. Errors accumulate in different ways depending on the
operations you perform on the numbers. Multiplying eps by
max(abs(array_of_inputs)) is probably a reasonable starting point.

-- 
Robert Kern

"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 mailing list