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