Я запускаю тесты NUnit для оценки некоторых известных тестовых данных и расчетных результатов. Числа представляют собой двойные числа с плавающей запятой, поэтому я не ожидаю, что они будут точно равными, но я не уверен, как рассматривать их как равные для заданной точности.
В NUnit мы можем сравнивать с фиксированным допуском:
double expected = 0.389842845321551d;
double actual = 0.38984284532155145d; // really comes from a data import
Expect(actual, EqualTo(expected).Within(0.000000000000001));
, и это прекрасно работает для чисел ниже нуля, но по мере роста числа действительно необходимо изменить допуск, поэтому мы всегда заботимся о том же количестве цифр точности.
В частности, этот тест не проходит:
double expected = 1.95346834136148d;
double actual = 1.9534683413614817d; // really comes from a data import
Expect(actual, EqualTo(expected).Within(0.000000000000001));
и, конечно же, большие числа терпят неудачу с допуском ..
double expected = 1632.4587642911599d;
double actual = 1632.4587642911633d; // really comes from a data import
Expect(actual, EqualTo(expected).Within(0.000000000000001));
Как правильно вычислить, что два числа с плавающей запятой равны с заданной точностью? Есть ли встроенный способ сделать это в NUnit?