В целом, работает ли сравнение с плавающей запятой, зависит не от значений, а от того, как они были получены.
, например
double v = 4/3.0; // inexact
double old_v = v;
some_func_that_might_change_its_argument(&v);
if (v == old_v) { ... }
, вероятно, будет работать хорошо, несмотря на неточное значение, тогда как:
double v = 0;
for( int i = 0; i < 5; ++i ) v += 0.1;
if (v == 0.5) { ... }
, вероятно, потерпит неудачу, даже если обе стороны неравенства можно выразить как простое рациональное число, где знаменатель является степенью 2.