From d9f85de2a188da9e5af0ec34acba7699ac5e330c Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Mon, 28 Jul 2008 21:37:47 +0200 Subject: [PATCH] Fix real comparison for real: allow +0 to be distinguished from -0. --- dmd/expression.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/dmd/expression.c b/dmd/expression.c index f0ed8ebd..bf1665b7 100644 --- a/dmd/expression.c +++ b/dmd/expression.c @@ -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)