Another issue to consider...

http://www.cygnus-software.com/papers/comparingfloats/Comparing%20floating%20point%20numbers.htm#_Toc135149458

-J

--
On Tue, Jul 31, 2007 at 08:46:41AM -1000, Joshua Hoblitt wrote:
> A couple of comments on dealing with floats.
> 
> - Use FLT_EPSILON/DBL_EPSILON from float.h
> 
> - You method is total overkill, return (fabs(x - y) < DBL_EPSILON ? 1 : 0);
>   should be sufficent (note: check with a numerical expert).
> 
> - What about NANs and INFs?  I typical test for one of the values being
>   NAN but allow INFs to be compared.
> 
> 
> -J
> 
> --
> On Tue, Jul 31, 2007 at 07:17:15PM +0200, Paul Cochrane wrote:
> > Hi all,
> > 
> > I'm wanting to remove all the floating point comparison warnings which
> > appear when compiling parrot and wanted some advice as to how best to
> > achieve this.
> > 
> > Floating point comparisons appear in code such as (taken from src/string.c):
> > 
> >     if (*p == '-' && f == 0.0)
> > 
> > I'd like to replace this with
> > 
> >     if (*p == '-' && is_float_equal(f, 0.0))
> > 
> > where
> > 
> > #define EPSILON 0.0000005
> > 
> > INTVAL is_float_equal(FLOATVAL x, FLOATVAL y)
> > {
> >     return (fabs(x - y) <= fabs(x + y)*EPSILON) ? 1 : 0;
> > }
> > 
> > (this code was adapted from equivalent fortran code given here:
> > http://www.lahey.com/float.htm courtesy of particle++).
> > 
> > Is this a good way to achieve the goal of safe floating point
> > comparisons?  The #define and function need to go somewhere.  Where
> > exactly?  And which header gets the declaration?  parrot.h?  Is there
> > a better way to do this?  Could/should I be using a macro instead?
> > 
> > Thanks heaps in advance!
> > 
> > Paul


Attachment: pgphIw19hSyrM.pgp
Description: PGP signature

Reply via email to