Maison > Java > javaDidacticiel > 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
Libérer: 2024-11-17 19:16:01
original
237 Les gens l'ont consulté

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);
Copier après la connexion

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
Copier après la connexion

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);
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal