sorting: compare_doubles()

Pasquale Tricarico pasquale.tricarico@pd.infn.it
Wed Dec 19 13:20:00 GMT 2001


Hi,

 Probably there is a bug in the compare_doubles() function, as written
in the documentation of the 1.0 release. It's form is:

int  compare_doubles (const double * a, const double * b)
{
    return (int) (*a - *b);
}

This function returns -1,0 or +1 depending on the values assumed by *a
and *b, except in the case of two doubles with an absolute difference
smaller than one; i.e.:

 a = 15.3;
 b = 14.9;

 in this case, the function will return ((int)0.4), that is equal to
zero, even if the two doubles are different!! 

 It is probably better to use some if(), i.e.:

int  compare_doubles (const double * a, const double * b)
{
	if ((*a) < (*b)) return (-1);
	if ((*a) > (*b)) return (+1);
	return 0;
}

 Best regards.  
 P. Tricarico
  

----------------------------------------------------------
  P. Tricarico                    PhD student in Physics 
  Website:               http://www.pd.infn.it/~tricaric
----------------------------------------------------------



More information about the Gsl-discuss mailing list