В qglobal.h
C++ (Qt)
...
#elif defined(QT_NO_FPU) || defined(QT_ARCH_ARM) || defined(QT_ARCH_WINDOWSCE) || defined(QT_ARCH_SYMBIAN)
typedef float qreal;
#else
typedef double qreal;
#endif
...
а в QQuaternion.h:
C++ (Qt)
QQuaternion(qreal scalar, qreal xpos, qreal ypos, qreal zpos);
...
inline bool operator==(const QQuaternion &q1, const QQuaternion &q2)
{
return q1.xp == q2.xp && q1.yp == q2.yp && q1.zp == q2.zp && q1.wp == q2.wp;
}
...
inline bool qFuzzyCompare(const QQuaternion& q1, const QQuaternion& q2) {
return qFuzzyCompare(q1.xp, q2.xp) &&
qFuzzyCompare(q1.yp, q2.yp) &&
qFuzzyCompare(q1.zp, q2.zp) &&
qFuzzyCompare(q1.wp, q2.wp);
}
Хотя потестил на разных данных (относительно больших и маленьких double, ну такие которые могут встретится при использовании поворотов через кватернионы) и результат получается один и тот же.
Но зачем проверка на равенство не в интервале?
Это потому что == должно вести себя так же как и == для встроенных типов? Но тогда зачем может потребоваться такое сравнение?