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.