![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Relative Error and TestingBoost , Math Toolkit 2.5.0 , Internal tools
|
![]() |
Important |
---|---|
Заголовок< |
template <class T> T relative_error(T a, T b); template <class A, class F1, class F2> test_result<see-below> test(const A& a, F1 test_func, F2 expect_func);
template <class T> T relative_error(T a, T v);
Возвращает относительную ошибку междуaиv, используя обычную формулу:
Кроме того, возвращенное значение равно нулю, если:
В противном случае, если только один изaиvравен нулю, то возвращенное значение равно 1.
template <class A, class F1, class F2> test_result<see-below> test(const A& a, F1 test_func, F2 expect_func);
Эта функция используется для тестирования функции против табулированных тестовых данных.
Тип возврата содержит статистические данные об относительных ошибках (максимальная, средняя, дисперсия, количество тестовых случаев и т. д.), а также ряд тестовых данных, которые вызвали наибольшую относительную ошибку. Общественными членами типа test_result являются:
unsigned worst()const;
Возвращает строку, в которой произошла худшая ошибка.
T min()const;
Возвращает наименьшую найденную относительную ошибку.
T max()const;
Возвращает наибольшую найденную относительную ошибку.
T mean()const;
Возвращает найденную ошибку.
boost::uintmax_t count()const;
Возвращает количество тестовых случаев.
T variance()const;
Возвращает дисперсию найденных ошибок.
T variance1()const;
Возвращает непредвзятое отклонение найденных ошибок.
T rms()const
Возвращает корневой средний квадрат, или квадратичное среднее из ошибок.
test_result&
operator+=(const test_result& t)
Объединяет два результата теста в один результат.
Шаблонный параметр test_result, является тем же типом, что и значения в двухмерном массиве, переданные для функционированиятест, примерно это<A::value_type::value_type
>.
Параметрaпредставляет собой матрицу тестовых данных и должен быть стандартной библиотекой. Тип последовательности, который содержит другой тип последовательности: обычно это будет двухмерный экземпляр<boost::array
>. Каждая строкаaдолжна содержать все параметры, которые передаются тестируемой функции, а также ожидаемый результат.
Параметрtest_funcявляется функцией тестируемого, она вызывается с каждой строкой тестовых данных вa. Тип F1 создается с помощью Boost. Ламбда: см. пример ниже.
Параметрexpect_funcявляется функтором, который извлекает ожидаемый результат из ряда тестовых данных вa. Тип F2 обычно создается с помощью Boost. Ламбда: см. пример ниже.
Если тестируемая функция возвращает неконечное значение, когда ожидается конечный результат, или если обнаружена грубая ошибка, то сообщение отправляется на<std::cerr
>, и сделан вызов BOOST_ERROR() (что означает, что включение этого заголовка требует использования Boost.Test). Это в основном помощь отладки / развития (и хорошее место для точки останова).
Предположим, что мы хотим проверить функции тгамма и лгамма, мы можем создать двухмерную матрицу тестовых данных, каждая строка является одним тестовым случаем и содержит три элемента: входное значение и ожидаемые результаты для функций тгамма и лгамма соответственно.
static const boost::array<boost::array<TestType, 3>, NumberOfTests> factorials = { /* big array of test data goes here */ };
Теперь мы можем использовать тестовую функцию для тестирования тгаммы:
using namespace boost::math::tools; using namespace boost::lambda; // get a pointer to the function under test: TestType (*funcp)(TestType) = boost::math::tgamma; // declare something to hold the result: test_result<TestType> result; // // and test tgamma against data: // result = test( factorials, bind(funcp, ret<TestType>(_1[0])), // calls tgamma with factorials[row][0] ret<TestType>(_1[1]) // extracts the expected result from factorials[row][1] ); // // Print out some results: // std::cout << "The Mean was " << result.mean() << std::endl; std::cout << "The worst error was " << (result.max)() << std::endl; std::cout << "The worst error was at row " << result.worst_case() << std::endl; // // same again with lgamma this time: // funcp = boost::math::lgamma; result = test( factorials, bind(funcp, ret<TestType>(_1[0])), // calls tgamma with factorials[row][0] ret<TestType>(_1[2]) // extracts the expected result from factorials[row][2] ); // // etc ... //
Статья Relative Error and Testing раздела Math Toolkit 2.5.0 Internal tools может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Internal tools ::
реклама |