Explication détaillée du problème de précision de la multiplication à double précision dans .net
En C #, le résultat de l'expression double i = 10 * 0,69;
est que i
se voit une valeur de 6,899999999999999999999999999999995, plutôt que le 6.9. Cela soulève la question: existe-t-il une erreur dans la multiplication à double précision dans .NET?
Représentation binaire et fonctionnement du point flottant
Pour comprendre ce comportement, vous devez avoir une compréhension approfondie des subtilités des représentations binaires et des opérations à virgule flottante. Les formats de points flottants représentent approximativement les nombres réels comme des valeurs binaires finies, ce qui peut entraîner des limitations de précision.
Le 0,69 apparemment simple ne peut pas être représenté avec précision en binaire. Il nécessite une boucle infinie de nombres binaires. La représentation binaire stockée dans le type de données double
est une valeur approximative de 0,69.
Constantes Optimisées et stockées par compilateur
Dans l'extrait de code fourni, le compilateur optimise l'expression en effectuant une multiplication et en stockant le résultat en tant que constante dans l'exécutable. Il le fait parce que ces valeurs sont connues au moment de la compilation. La valeur stockée est une approximation de point flottante de 6,9, ce qui est légèrement inférieur à la valeur réelle.
Solutions et types de données alternatifs
] pour résoudre ce problème et obtenir des résultats plus précis, le type de données décimal
peut être utilisé, qui est conçu pour représenter des valeurs décimales non répétitifs avec une précision plus élevée. L'expression décimal i = 10m * 0,69m;
produira un résultat de 6,9 m.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3