Comparaison de float et double en C++ : comment éviter les erreurs dues à la perte de précision ?
Bonjour à tous. Je suis un développeur C++ débutant et j'ai rencontré un problème lors de la comparaison de nombres à virgule flottante. J'écris un programme pour simuler des processus physiques, et j'ai besoin de vérifier si deux nombres de type float ou double sont égaux.
Le problème est qu'en raison des erreurs de calcul (par exemple, 0.1 + 0.2 n'est pas égal à 0.3), la comparaison directe avec `==` ne fonctionne presque jamais :
```cpp
#include
int main() {
double a = 0.1 + 0.2;
double b = 0.3;
if (a == b) {
std::cout << "Égaux" << std::endl;
} else {
std::cout << "Pas égaux" << std::endl; // Ceci est affiché
}
return 0;
}
```
J'ai lu qu'il faut comparer avec un certain "epsilon" (tolérance), mais je ne comprends pas comment choisir correctement cette valeur. Par exemple, pour certains nombres, `1e-6` convient, mais pour d'autres, non. Existe-t-il une méthode universelle ? Comment prendre en compte le fait que float et double ont une précision différente ? Et que faire si les nombres sont très grands ou très petits ?
Je serais reconnaissant pour une explication détaillée.
No answers yet.
Connectez-vous pour laisser une réponse