سؤال

وأريد أن أكون قادرة على المقارنة بين الزوجي تجاهل خسارة دقة ممكنة. هل هناك طريقة بالفعل أن يعالج هذه الحالة؟

إذا لم يكن كذلك، هناك عتبة / التوجيهي لتعرف كم هو التكافؤ الكافي بين اثنين الزوجي؟

هل كانت مفيدة؟

المحلول

والعتبة هي تعتمد اعتمادا كليا على المشكلة نفسها. بالنسبة لبعض المشاكل، قد تفكر في 1.001 يساوي 1.002 ولبعض المشاكل، قد تحتاج إلى عتبة أصغر من ذلك بكثير.

ووtechique العام هو:

Math.Abs(a - b) < some_epsilon    // `a` is roughly equivalent to `b`

نصائح أخرى

وA، خيار دقيق جيد جدا لذلك هو:

public static bool DoubleEquality(double a, double b) 
{
    const double epsilonValue = 1e-15;
    if (double.IsNaN(a))
        return double.IsNaN(b);
    else if (double.IsInfinity(a))
        return double.IsInfinity(b);
    else if (a == 0) 
        return b == 0;
    else
        return Math.Abs(a - b) <= Math.Abs(a * epsilonValue);
}

لاحظ أن Double.Epsilon ليست قيمة إبسيلون جيدة لهذا الغرض. وهذا يخلق إبسيلون أن المقاييس إلى حد ما مع حجم القيمة الأولى، مما يساعد قليلا جدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top