Если вы размышляете над 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
. Кто-нибудь знает, почему эта формула используется? -
В чем смысл выражения возврата? По-видимому, по умолчанию, если num2 больше, чем num, чем отрицательное значение num2, должно быть меньше num. Может быть, я здесь что-то пропустил, но кажется лишним. Для меня это похоже на проверку, если 5 больше 3, а если -5 меньше 3 (в качестве примера).