Я запускаю тесты 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?