QQuaternion: prepare isNull(), isIdentity() for constexpr'ification

...by dropping the use of qIsNull(), which, in Qt 4, distinguished
between -0.0f and +0.0f.

But mathematically, whether x, y, z are ±0 doesn't change the fact
that the result is the identity element (x, y, z should contain the
identity element for addition and w the one for multiplication), or
the null element (additive identity).

So using qIsNull() was wrong even in Qt 4. In Qt 5, qIsNull() returns
true for both ±0, so we can just as well compare to 0.0f instead,
which allows to mark these functions constexpr (qIsNull() can't be).

Do so.

Change-Id: I78b1fa7890036dd3cb4de7f90b75d439f9835e73
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
bb10
Marc Mutz 2015-04-24 10:24:44 +02:00
parent cecd52b89a
commit ec73b5d4b8
1 changed files with 2 additions and 2 deletions

View File

@ -161,12 +161,12 @@ inline QQuaternion::QQuaternion(float aScalar, float xpos, float ypos, float zpo
inline bool QQuaternion::isNull() const
{
return qIsNull(xp) && qIsNull(yp) && qIsNull(zp) && qIsNull(wp);
return xp == 0.0f && yp == 0.0f && zp == 0.0f && wp == 0.0f;
}
inline bool QQuaternion::isIdentity() const
{
return qIsNull(xp) && qIsNull(yp) && qIsNull(zp) && wp == 1.0f;
return xp == 0.0f && yp == 0.0f && zp == 0.0f && wp == 1.0f;
}
inline float QQuaternion::x() const { return xp; }