Comprendre les inexactitudes dans la multiplication à double précision .NET
Le terme « double précision » dans .NET peut être trompeur. L’arithmétique à virgule flottante double précision n’est pas toujours parfaitement précise. Examinons un exemple courant :
<code>double i = 10 * 0.69;</code>
Au lieu du 6,9 attendu, le résultat est souvent 6,89999999999999995. Cette imprécision provient de la façon dont les nombres à virgule flottante sont représentés et stockés.
Les doubles, comme les autres types à virgule flottante, se rapprochent des nombres réels en utilisant un format binaire spécifique. De nombreuses valeurs décimales, telles que 0,69 et 1/3, ne peuvent pas être représentées avec précision dans ce format binaire en raison de ses limitations inhérentes.
Le compilateur optimise généralement la multiplication au moment de la compilation, en stockant le résultat sous forme de constante. Cependant, comme 6.9 ne dispose pas d'une représentation binaire exacte, la constante stockée est une approximation.
Pour atténuer cela, envisagez d'utiliser le type decimal
, qui offre une plus grande précision au prix de performances réduites. Pour les applications nécessitant une précision extrêmement élevée, les bibliothèques fournissant une prise en charge des nombres rationnels, telles que BigRational
, proposent une approche alternative.
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!