[Numpy-discussion] Testing for close to zero?

Robert Kern robert.kern@gmail....
Mon Jan 19 14:55:39 CST 2009

On Mon, Jan 19, 2009 at 14:43, Jonathan Taylor
<jonathan.taylor@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