Tudo bem comparar pontos flutuantes com 0,0 sem epsilon?

Estou ciente de que, para comparar dois valores de ponto flutuante, é necessário usar alguma precisão epsilon, pois eles não são exatos. No entanto, gostaria de saber se existem casos extremos, nos quais não preciso desse epsilon.

Em particular, gostaria de saber se é sempre seguro fazer algo assim:

double foo(double x){
    if (x < 0.0) return 0.0;
    else return somethingelse(x); // somethingelse(x) != 0.0
}

int main(){
   int x = -3.0;
   if (foo(x) == 0.0) { 
     std::cout << "^- is this comparison ok?" << std::endl; 
   }
}

Eu sei que existem maneiras melhores de escreverfoo (por exemplo, retornando uma sinalização além disso), mas gostaria de saber se, em geral, está correto atribuir0.0 para uma variável de ponto flutuante e depois compare-a0.0.

Ou, mais geral, a comparação a seguir produz sempre verdade?

double x = 3.3;
double y = 3.3;
if (x == y) { std::cout << "is an epsilon required here?" << std::endl; }

Quando tentei, parece funcionar, mas pode ser que não se deva confiar nisso.

questionAnswers(4)

yourAnswerToTheQuestion