У меня есть два вектора:Проверяется два вектора равны
std::vector<double> calculatedValues = calculateValues();
std::vector<double> expectedValues = {1.1, 1.2};
Я использую cpputest, чтобы проверить, если эти векторы равны:
CHECK_TRUE(calculatedValues == expectedValues)
Это работает. Тем не менее, мне интересно, не следует ли использовать некоторый допуск, потому что я все-таки сравниваю удваивает.
Я не думаю, что мы сможем ответить на этот вопрос для вас, не зная, что требования вашей программы. – ApproachingDarknessFish
Этот вопрос действительно не похож на 'vector'; что кажется случайным. Это больше о плавающей точке, эпсилон и т. Д. - все обычные подозреваемые, подробно обсуждаемые во многих других потоках. ;-) После того, как вы определились с выбранным вами методом/допуском, вы сможете предоставить пользовательскую функцию компаратора или, возможно, даже перегрузить (свободный или встроенный) 'operator ==' для вашего вектора и выполнить итеративное сравнение, используя собственный компаратор. –
Нельзя просто выбросить эпсилон и ожидать удовлетворительного решения - для некоторых целей требуется точное равенство (проверка детерминированных вычислительных алгоритмов), для других может потребоваться равенство трех знаков после запятой (например, satnav, 1 метр для прибытие в пункт назначения в автомобиле) в CAD/CAM, где разумные понятия равенства зависят от точности, которую вы хотите/на машине. Итог: вам нужно подумать о модели, которую вы моделируете, и о том, что считается «равным» в этой системе, и перевести эту концепцию в свою программу. – Ben