Maison >Java >javaDidacticiel >Comment puis-je décaler avec précision les décimales dans les doubles tout en minimisant les erreurs d'arrondi ?
Manipulation des décimales en double : résolution des erreurs d'arrondi
La précision est un aspect crucial des opérations numériques, en particulier lorsqu'il s'agit de données à virgule flottante types comme double. Lorsqu'on tente de décaler les décimales en utilisant la multiplication ou la division, on se heurte au défi des erreurs d'arrondi. Cet article examine les nuances du déplacement des décimales dans les doubles et explore des techniques pour atténuer les erreurs d'arrondi.
Problème : déplacement des décimales à l'aide de la multiplication
Considérons le scénario dans lequel 1234 est stocké dans un double et le but est de déplacer la décimale pour obtenir 12,34. Multiplier 1234 par 0,1 deux fois, comme illustré dans l'extrait de code ci-dessous, ne donne pas exactement le résultat souhaité de 12,34.
double x = 1234; for(int i=1;i<=2;i++) { x = x*.1; } System.out.println(x); // Prints: 12.340000000000002
Cause : inexactitudes dans la représentation à virgule flottante
Le problème sous-jacent est que 0,1 ne peut pas être représenté avec précision en double. Effectuer la multiplication deux fois aggrave cette erreur, entraînant un léger écart dans la valeur finale.
Solution : Division par puissances de 10
Pour éviter les erreurs de composition, pensez à diviser x par 100 à la place. Puisque 100 peut être représenté avec précision en double, cette approche donne le résultat correct :
double x = 1234; x /= 100; System.out.println(x); // Prints: 12.34
BigDecimal : gestion de l'arithmétique précise
Pour les scénarios nécessitant une précision absolue, pensez à utiliser BigDecimal. Contrairement à double ou float, BigDecimal peut gérer l'arithmétique décimale sans erreurs d'arrondi. Cependant, cela peut entraîner une dégradation des performances par rapport aux types numériques primitifs.
Erreurs d'arrondi : comprendre et atténuer
Les erreurs d'arrondi sont inhérentes aux calculs à virgule flottante. La double précision autorise 15 à 16 chiffres significatifs, ce qui signifie que de petites erreurs d'arrondi peuvent s'accumuler au fil de plusieurs opérations. La division par puissances de 10, comme démontré ci-dessus, permet d'atténuer ces erreurs, mais elle n'est pas infaillible pour tous les scénarios.
Remarque sur la division et la multiplication
Il est important à noter que x/100 et x*0,01 ne sont pas interchangeables en raison de divergences dans les erreurs d'arrondi. La division dépend de la valeur de x, tandis que 0,01 a une erreur d'arrondi fixe.
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!