Если вы поразмышляете над 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));
}
Я пытаюсь понять две разные вещи:
Откуда они взяли формулу для num2? Думаю, я просто не понимаю значения первого сложения значения 10.0
, а затем умножения всех результатов на это число 2.2204460492503131E-16
. Кто-нибудь знает, почему используется эта формула?
В чем смысл оператора return? Похоже, что по умолчанию, если num2 больше, чем num, отрицательное значение num2 должно быть меньше num. Возможно, я что-то здесь упускаю, но это кажется лишним. Для меня это похоже на проверку, если 5 больше 3, а если -5 меньше 3 (например).