Russian Qt Forum

Qt => Общие вопросы => Тема начата: Disa от Август 31, 2012, 15:08



Название: qreal == qreal ?
Отправлено: Disa от Август 31, 2012, 15:08
В 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, ну такие которые могут встретится при использовании поворотов через кватернионы) и результат получается один и тот же.
Но зачем проверка на равенство не в интервале?
Это потому что == должно вести себя так же как и == для встроенных типов? Но тогда зачем может потребоваться такое сравнение?


Название: Re: qreal == qreal ?
Отправлено: Igors от Август 31, 2012, 15:45
Но зачем проверка на равенство не в интервале?
Это потому что == должно вести себя так же как и == для встроенных типов?
Да, теория рекомендует перегруженному оператору придавать тот же смысл что и стандартному. И с этой рекомендацией я полностью согласен.

Отрадно видеть интерес к кватерниону (может что-то и вырастет из баловства :))