Maison > développement back-end > C++ > Pourquoi « x == 0.1 » ne fonctionne-t-il pas avec « double x = 0.1 » en C# ?

Pourquoi « x == 0.1 » ne fonctionne-t-il pas avec « double x = 0.1 » en C# ?

Susan Sarandon
Libérer: 2025-01-22 20:51:13
original
692 Les gens l'ont consulté

Why Doesn't `x == 0.1` Work with `double x = 0.1` in C#?

Comparaison de nombres à virgule flottante en C# : dilemme décimal

En C#, vous pouvez rencontrer quelques problèmes lors de la comparaison de valeurs de type double. Considérez le code suivant :

<code class="language-csharp">double x = 0.1;
if (x == 0.1)
{
    // ...
}</code>
Copier après la connexion

Étonnamment, ce code n'entre pas dans la déclaration if. Pourquoi est-ce ?

Problème de nombre à virgule flottante

La racine du problème réside dans la façon dont les ordinateurs représentent les nombres à virgule flottante (en particulier double). Contrairement aux nombres entiers, double utilise des fractions binaires au lieu de fractions décimales. Cela signifie que certaines valeurs décimales, telles que 0,1, ne peuvent pas être stockées exactement.

Par exemple, en notation binaire, 0,1 est représenté par 0,000110011001100110011001.... L'ordinateur tronque cette boucle infinie de décimales en une représentation finie, qui peut ne pas correspondre exactement à la valeur attendue.

Solution

Afin de résoudre ce problème, vous pouvez envisager les méthodes suivantes :

  • Utilisation du type decimal : Le type decimal stocke les nombres en utilisant la notation décimale, permettant une représentation précise.
  • Comparaison Epsilon : Utilisez une petite marge d'erreur (par exemple Math.Abs(x - 0.1)) pour comparer des nombres à virgule flottante.

Explication des raisons

Les fractions binaires diffèrent des fractions décimales par leur capacité à représenter certains nombres. Par exemple, le nombre 1/10 ne peut pas être représenté exactement en binaire, ce qui fait que son expansion binaire est d'environ 0,0001100... Le processus d'arrondi de l'ordinateur introduit des inexactitudes lors du stockage des nombres à virgule flottante.

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