From ac2bde9caf41764eacca4f9ece1b724dc924babf Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 17 Dec 2015 13:07:17 -0800 Subject: QVariant: make sure two floating points compare equal if they are equal Not just fuzzily equal. The fuzzy comparison fails for infinities, since the expression p1 - p2 where p1 = p2 = infinity is NaN. And NaN comparisons are always false. As a nice side-effect, we don't do the more expensive computation of a multiplication if the two numbers really are equal. Task-number: QTBUG-50036 Change-Id: I11f559ef75544c50b3f8ffff1420cec7c7273295 Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/corelib/kernel/qvariant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index fdcbdb1c45..3e6aefab2a 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -3448,7 +3448,7 @@ static int numericCompare(const QVariant::Private *d1, const QVariant::Private * Q_ASSERT(ok); qreal r2 = qConvertToRealNumber(d2, &ok); Q_ASSERT(ok); - if (qFuzzyCompare(r1, r2)) + if (r1 == r2 || qFuzzyCompare(r1, r2)) return 0; return r1 < r2 ? -1 : 1; } -- cgit v1.2.3