Fix real comparison for real: allow +0 to be distinguished from -0.

This commit is contained in:
Christian Kamm
2008-07-28 21:37:47 +02:00
parent cf4565095c
commit d9f85de2a1

View File

@@ -1494,11 +1494,12 @@ complex_t RealExp::toComplex()
int RealEquals(real_t x1, real_t x2)
{
return (isnan(x1) && isnan(x2)) ||
/* In some cases, the REALPAD bytes get garbage in them,
* so be sure and ignore them.
*/
x1 == x2;
return // special case nans
(isnan(x1) && isnan(x2)) ||
// and zero, in order to distinguish +0 from -0
(x1 == 0 && x2 == 0 && 1./x1 == 1./x2) ||
// otherwise just compare
(x1 != 0. && x1 == x2);
}
int RealExp::equals(Object *o)