From 580a34bd83ad503a75de7c344033ad36f2a8b028 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Wed, 29 Jun 2005 15:57:29 +0000 Subject: [PATCH] BugFix: comparasion between two signed floats was wrong [r6129] --- ir/tv/fltcalc.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ir/tv/fltcalc.c b/ir/tv/fltcalc.c index 0dfe0d8d8..b07818c8f 100644 --- a/ir/tv/fltcalc.c +++ b/ir/tv/fltcalc.c @@ -1392,6 +1392,7 @@ int fc_comp(const void *a, const void *b) { const char *val_a = (const char*)a; const char *val_b = (const char*)b; + int mul = 1; /* * shortcut: if both values are identical, they are either @@ -1412,24 +1413,26 @@ int fc_comp(const void *a, const void *b) if (_sign(val_a) != _sign(val_b)) return (_sign(val_a)==0)?(1):(-1); + mul = _sign(a) ? -1 : 1; + /* both infinity means equality */ if ((_desc(val_a).class == INF) && (_desc(val_b).class == INF)) return 0; /* infinity is bigger than the rest */ if (_desc(val_a).class == INF) - return _sign(val_a)?(-1):(1); + return 1 * mul; if (_desc(val_b).class == INF) - return _sign(val_b)?(1):(-1); + return -1 * mul; /* check first exponent, that mantissa if equal */ switch (sc_comp(_exp(val_a), _exp(val_b))) { case -1: - return -1; + return -1 * mul; case 1: - return 1; + return 1 * mul; case 0: - return sc_comp(_mant(val_a), _mant(val_b)); + return sc_comp(_mant(val_a), _mant(val_b)) * mul; default: return 2; } -- 2.20.1