Éviter les erreurs d’arrondi avec les nombres
En programmation, travailler avec des nombres à virgule flottante peut parfois réserver des surprises. Une opération simple comme 0.1 + 0.2 peut ne pas donner exactement 0.3 à cause des limites de représentation des nombres flottants. Comprendre ces erreurs et savoir comment les éviter est essentiel pour écrire un code fiable.
1. Pourquoi les erreurs d’arrondi apparaissent
Les nombres à virgule flottante (float, double) sont stockés en binaire, et certaines fractions décimales simples (comme 0.1) ne peuvent pas être représentées exactement.
Exemple en Python :
print(0.1 + 0.2)
# Affiche : 0.30000000000000004
Le résultat semble étrange, mais il est normal pour les floats.
2. Conséquences des erreurs d’arrondi
Comparaisons incorrectes : if 0.1 + 0.2 == 0.3 peut être faux.
Calculs financiers imprécis : petites erreurs peuvent s’accumuler.
Résultats inattendus dans des algorithmes scientifiques ou statistiques.
3. Comment éviter ces erreurs
3.1 Utiliser des types précis pour l’argent
Dans certains langages, utilisez decimal (Python), BigDecimal (Java), decimal (C#).
Exemple en Python :
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b) # Affiche exactement 0.3
3.2 Arrondir au moment du calcul
Utilisez la fonction round() pour limiter le nombre de décimales :
x = 0.1 + 0.2
x = round(x, 2)
print(x) # Affiche 0.3
Pratique pour l’affichage ou les comparaisons simples.
3.3 Comparer avec une tolérance
Pour éviter les faux négatifs dans les comparaisons :
import math
math.isclose(0.1 + 0.2, 0.3) # True
Cela tient compte d’une petite marge d’erreur (epsilon).
3.4 Éviter les floats pour les compteurs entiers
Si vous travaillez avec des quantités exactes (ex. nombre d’articles), utilisez des entiers (int) plutôt que des floats.
4. Bonnes pratiques générales
Connaître la précision de votre type (float, double, decimal).
Ne jamais comparer directement deux floats pour l’égalité.
Privilégier les types exacts pour l’argent ou les comptages précis.
Arrondir ou utiliser une tolérance lors de calculs intermédiaires si nécessaire.