Maison  >  Article  >  Java  >  Comment éviter les erreurs de précision en virgule flottante en Java ?

Comment éviter les erreurs de précision en virgule flottante en Java ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-17 19:16:01149parcourir

How to Avoid Floating-Point Precision Errors in Java?

Éviter les erreurs de précision en virgule flottante avec les flottants et les doubles en Java

En Java, les opérations impliquant des nombres à virgule flottante (flottants et doubles) peut conduire à des erreurs de précision. Ces erreurs surviennent car les flottants et les doubles représentent des nombres sous forme binaire, ce qui ne fournit pas de représentations exactes pour toutes les valeurs décimales.

Considérez le code suivant :

for (float value = 0.0f; value < 1.0f; value += 0.1f)
    System.out.println(value);

Au lieu des valeurs attendues, la sortie affiche des incréments de 0,1 avec une légère accumulation d'erreurs :

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

Résolution des erreurs de précision

Pour éviter ce problème, envisagez les approches suivantes :

  • Utiliser la tolérance dans les comparaisons : Lorsque vous comparez des flottants ou des doubles pour l'égalité, prévoyez une petite tolérance dans les deux sens pour tenir compte des erreurs de précision potentielles.
  • Utilisez BigDecimal : Vous pouvez également utiliser la classe BigDecimal, qui fournit des représentations décimales exactes des nombres. Voici un exemple :
BigDecimal step = new BigDecimal("0.1");
for (BigDecimal value = BigDecimal.ZERO;
     value.compareTo(BigDecimal.ONE) < 0;
     value = value.add(step)) {
    System.out.println(value);
}

Ce code représentera avec précision et incrémentera la valeur de 0,1, évitant ainsi l'accumulation d'erreurs de précision.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn