Avatar ·

Comparação de float e double em C++: como evitar erros devido à perda de precisão?

Olá a todos. Sou um desenvolvedor C++ iniciante e me deparei com um problema ao comparar números de ponto flutuante. Estou escrevendo um programa para simular processos físicos e preciso verificar se dois números do tipo float ou double são iguais. O problema é que, devido a erros de arredondamento (por exemplo, 0.1 + 0.2 não é igual a 0.3), a comparação direta com `==` quase nunca funciona: ```cpp #include int main() { double a = 0.1 + 0.2; double b = 0.3; if (a == b) { std::cout << "Iguais" << std::endl; } else { std::cout << "Diferentes" << std::endl; // Isso é exibido } return 0; } ``` Li que é necessário comparar com algum "epsilon" (tolerância), mas não entendo como escolher esse valor corretamente. Por exemplo, para alguns números, `1e-6` funciona, mas para outros, não. Existe uma maneira universal? Como levar em conta que float e double têm precisões diferentes? E o que fazer se os números forem muito grandes ou muito pequenos? Agradeço por uma explicação detalhada.