Maison > développement back-end > C++ > Comment puis-je comparer en toute sécurité des valeurs doubles en C# ?

Comment puis-je comparer en toute sécurité des valeurs doubles en C# ?

Mary-Kate Olsen
Libérer: 2025-01-22 21:01:12
original
924 Les gens l'ont consulté

How Can I Safely Compare Double Values in C#?

Un moyen fiable de comparer des valeurs doubles en C#

En C#, les comparaisons de valeurs en double précision conduisent souvent à des résultats inattendus en raison des limitations inhérentes à l'arithmétique à virgule flottante. Pour comprendre pourquoi cela se produit, examinons les raisons du manque de précision en virgule flottante.

Précision en virgule flottante insuffisante

Les types de données float et double stockent des valeurs numériques au format binaire. Ce format manque intrinsèquement de précision pour représenter avec précision certains nombres, y compris de simples valeurs décimales comme 0,1. Lorsque double reçoit une valeur de 0,1, il stocke en fait une représentation binaire qui est une approximation de la vraie valeur décimale. Ce manque de précision provient de la nature de la conversion des nombres décimaux en fractions binaires.

Solutions possibles

Pour gérer efficacement la comparaison de valeurs doubles, envisagez la solution suivante :

  1. Comparaison de valeurs double à double : Lors de la comparaison de valeurs doubles, il n'est généralement pas recommandé d'utiliser l'opérateur d'égalité (==). Au lieu de cela, des méthodes de comparaison approximative peuvent être utilisées pour tenir compte des erreurs d’arrondi potentielles. Cela implique généralement de définir une valeur de tolérance et de comparer si la différence entre deux valeurs est inférieure à cette tolérance.

  2. Type de données décimal : Pour des opérations et des comparaisons numériques précises, pensez à utiliser le type de données décimal, qui stocke les valeurs en notation décimale. Cette approche garantit une représentation précise des valeurs décimales comme 0,1.

Instructions supplémentaires

Le manque de précision dans le stockage flottant et double est dû au fait que la représentation binaire correspond naturellement aux valeurs numériques qui sont des puissances de 2, telles que 1/2, 1/4, etc. Cependant, une fraction décimale avec un dénominateur spécifique, tel que 0,1 (1/10), ne peut pas être représentée exactement en binaire sans entraîner des erreurs d'arrondi.

Exemple

<code class="language-csharp">double x = 0.1;
double y = 0.1;
double tolerance = 0.000001; // 定义容差

if (Math.Abs(x - y) < tolerance) // 使用容差进行近似比较
{
    // 代码块
}</code>
Copier après la connexion

Cet exemple montre comment utiliser Math.Abs() pour calculer la différence absolue entre deux valeurs doubles et la comparer à une tolérance prédéfinie, permettant une comparaison plus fiable des valeurs doubles. Le choix d'une valeur de tolérance appropriée dépend du scénario d'application spécifique et des exigences de précision.

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