Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Membandingkan Nombor Titik Terapung dalam C#?
Dalam C#, perbandingan nombor titik terapung boleh memberikan cabaran kerana had ketepatan yang wujud. Untuk menyelesaikan masalah ini, pertimbangkan untuk melaksanakan fungsi perbandingan tersuai.
Menulis fungsi IsEqual generik untuk nilai titik terapung mungkin mencabar. Pendekatan biasa ialah menggunakan ambang toleransi, atau epsilon. Contohnya:
<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>
Kaedah melaksanakan fungsi IsGreater dan IsLess adalah serupa:
<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>
Fungsi ini menyediakan cara yang berguna untuk membandingkan nilai titik terapung dalam C# sambil mengambil kira had ketepatan yang wujud.
Atas ialah kandungan terperinci Bagaimana untuk Membandingkan Nombor Titik Terapung dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!