Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Membandingkan Nombor Titik Terapung dalam C#?

Bagaimana untuk Membandingkan Nombor Titik Terapung dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-23 10:56:10750semak imbas

How to Reliably Compare Floating-Point Numbers in C#?

Fungsi perbandingan titik terapung 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.

Fungsi IsEqual

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>

Fungsi IsGreater dan IsLess

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn