En C#, la comparaison de nombres à virgule flottante peut présenter des défis en raison de leurs limites de précision inhérentes. Pour résoudre ce problème, envisagez d'implémenter une fonction de comparaison personnalisée.
Écrire une fonction IsEqual générique pour les valeurs à virgule flottante peut être difficile. Une approche courante consiste à utiliser un seuil de tolérance, ou epsilon. Par exemple :
<code class="language-csharp">public static bool NearlyEqual(double a, double b, double epsilon) { const double MinNormal = 2.2250738585072014E-308d; double absA = Math.Abs(a); double absB = Math.Abs(b); double diff = Math.Abs(a - b); // 处理特殊情况(例如,无穷大) if (a.Equals(b)) return true; // 考虑 a 或 b 接近零的情况 if (a == 0 || b == 0 || absA + absB < MinNormal) return diff < epsilon; // 使用相对误差 return diff / (absA + absB) < epsilon; }</code>
La méthode d'implémentation des fonctions IsGreater et IsLess est similaire :
<code class="language-csharp">public static bool IsGreater(double a, double b, double epsilon) { // 处理特殊情况 if (a.CompareTo(b) > 0) return true; if (a.CompareTo(b) == 0) return false; // 对非零情况使用相对误差 double diff = a - b; double absA = Math.Abs(a); double absB = Math.Abs(b); return diff / (absA + absB) > epsilon; } public static bool IsLess(double a, double b, double epsilon) { // IsGreater 的反向操作 return IsGreater(b, a, epsilon); }</code>
Ces fonctions fournissent un moyen utile de comparer des valeurs à virgule flottante en C# tout en tenant compte de leurs limitations de précision inhérentes.
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!