Maison > développement back-end > C++ > Pourquoi « x == 0.1 » ne fonctionne-t-il pas toujours avec le type de données « double » de C# ?

Pourquoi « x == 0.1 » ne fonctionne-t-il pas toujours avec le type de données « double » de C# ?

Linda Hamilton
Libérer: 2025-01-22 20:46:11
original
672 Les gens l'ont consulté

Why Doesn't `x == 0.1` Always Work with C#'s `double` Data Type?

C# double Comparaisons : problèmes de précision

Travailler avec des nombres à virgule flottante (comme le type double de C#) présente souvent des défis inattendus lors de la comparaison de valeurs. Un exemple courant consiste à comparer une variable double à 0,1 :

double x = 0.1;
if (x == 0.1) { /* Code */ }
Copier après la connexion

Cette comparaison apparemment simple pourrait étonnamment échouer.

Comprendre le problème : représentation binaire ou décimale

La cause première réside dans la façon dont les nombres à virgule flottante sont stockés. double les valeurs sont stockées sous forme de fractions binaires et non de fractions décimales. Cela signifie que de nombreuses valeurs décimales, dont 0,1, ne peuvent pas être représentées avec précision sous forme de fraction binaire. L'ordinateur stocke plutôt une approximation, ce qui entraîne des différences subtiles qui affectent les comparaisons.

La solution : utiliser le decimal Type de données

Pour éviter ce problème de précision, utilisez le type de données decimal. decimal les valeurs sont stockées en utilisant la notation décimale, permettant une représentation exacte de nombres comme 0,1.

decimal x = 0.1m;
if (x == 0.1m) { /* Code */ }
Copier après la connexion

L'utilisation de decimal garantit un stockage et une comparaison précis de 0,1.

Représentation à virgule flottante : un examen plus approfondi

Pour illustrer le problème, considérons la représentation décimale. 12.34 est :

<code>1 * 10^1 + 2 * 10^0 + 3 * 10^-1 + 4 * 10^-2</code>
Copier après la connexion

De même, 0,1 est :

<code>1 * 10^-1</code>
Copier après la connexion

Cependant, en binaire, certains nombres (comme 1/10 ou 0,1 décimal) manquent de représentation précise. Ils sont approximés, ce qui conduit à des écarts qui entraînent des résultats inattendus dans les comparaisons. Cette approximation explique pourquoi x == 0.1 peut échouer lorsque x est un double.

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!

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