c++ - qreal equality fails in release, but works in debug (and cast to float also works) -


in code, have large number of checks equality...

for example:

int main(int argc, char *argv[]) {     qapplication  a(argc, argv);       qgraphicslineitem* x = new qgraphicslineitem(50, 50, -50, -50);     qgraphicsview view(new qgraphicsscene(-200, -150, 400, 300) );     view.scene()->additem(x);     view.show();      bool sameline = true;     qlinef line1 = x->line();     qreal _length = line1.length();      foreach(qgraphicsitem* item, view.scene()->selecteditems())     {         qgraphicslineitem *item2 = dynamic_cast<qgraphicslineitem*>(item);         if(item2->line().length() != _length )             sameline = false;     }     qdebug("same line: %d", sameline); } 

it seems work... in debug. when tested in release, fails ?

assume single selected item, item1 , item2 same, regardless of precision, above lengths should equal....

in debug, have not been able see fail... yet in release, fails !

the functions above (length()) return qreal

the work-arounds see be
- implement own check equality, limits precision, or
- cast qreal values float.
illogical (and lot of work, have check lots of potential places).

can please explain why happening , how best go around problem ?

you should compare floating point values example qfuzzycompare if use qt. should never compare 2 floating point variables using ==.


Comments

Popular posts from this blog

c# - Better 64-bit byte array hash -

webrtc - Which ICE candidate am I using and why? -

php - Zend Framework / Skeleton-Application / Composer install issue -