Я пытаюсь понять код Microsoft DoubleUtil.AreClose (), который Я размышлял над

Если вы поразмышляете над WindowsBase.dll> MS.Internal.DoubleUtil.AreClose (...) , вы получите следующий код:

public static bool AreClose(double value1, double value2)
{
    if (value1 == value2)
    {
        return true;
    }
    double num2 = ((Math.Abs(value1) + Math.Abs(value2)) + 10.0) * 2.2204460492503131E-16;
    double num = value1 - value2;
    return ((-num2 < num) && (num2 > num));
}

Я пытаюсь понять две разные вещи:

  1. Откуда они взяли формулу для num2? Думаю, я просто не понимаю значения первого сложения значения 10.0 , а затем умножения всех результатов на это число 2.2204460492503131E-16 . Кто-нибудь знает, почему используется эта формула?

  2. В чем смысл оператора return? Похоже, что по умолчанию, если num2 больше, чем num, отрицательное значение num2 должно быть меньше num. Возможно, я что-то здесь упускаю, но это кажется лишним. Для меня это похоже на проверку, если 5 больше 3, а если -5 меньше 3 (например).

13
задан Brian Rogers 13 April 2019 в 15:56
поделиться