É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.