/Src/Dependencies/Boost/libs/math/doc/sf_and_dist/relative_error.qbk
http://hadesmem.googlecode.com/ · text · 134 lines · 105 code · 29 blank · 0 comment · 0 complexity · 8f6a12a05369705fed741daf35d3dd17 MD5 · raw file
- [section:error_test Relative Error and Testing]
- [h4 Synopsis]
- ``
- #include <boost/math/tools/test.hpp>
- ``
- 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);
- [h4 Description]
- template <class T>
- T relative_error(T a, T v);
- Returns the relative error between /a/ and /v/ using the usual formula:
- [equation error1]
- In addition the value returned is zero if:
- * Both /a/ and /v/ are infinite.
- * Both /a/ and /v/ are denormalised numbers or zero.
- Otherwise if only one of /a/ and /v/ is zero then the value returned is 1.
- template <class A, class F1, class F2>
- test_result<see-below> test(const A& a, F1 test_func, F2 expect_func);
-
- This function is used for testing a function against tabulated test data.
- The return type contains statistical data on the relative errors (max, mean,
- variance, and the number of test cases etc), as well as the row of test data that
- caused the largest relative error. Public members of type test_result are:
- [variablelist
- [[`unsigned worst()const;`][Returns the row at which the worst error occurred.]]
- [[`T min()const;`][Returns the smallest relative error found.]]
- [[`T max()const;`][Returns the largest relative error found.]]
- [[`T mean()const;`][Returns the mean error found.]]
- [[`boost::uintmax_t count()const;`][Returns the number of test cases.]]
- [[`T variance()const;`][Returns the variance of the errors found.]]
- [[`T variance1()const;`][Returns the unbiased variance of the errors found.]]
- [[`T rms()const`][Returns the Root Mean Square, or quadratic mean of the errors.]]
- [[`test_result& operator+=(const test_result& t)`][Combines two test_result's into
- a single result.]]
- ]
- The template parameter of test_result, is the same type as the values in the two
- dimensional array passed to function /test/, roughly that's
- `A::value_type::value_type`.
- Parameter /a/ is a matrix of test data: and must be a standard library Sequence type,
- that contains another Sequence type:
- typically it will be a two dimensional instance of
- [^boost::array]. Each row
- of /a/ should contain all the parameters that are passed to the function
- under test as well as the expected result.
- Parameter /test_func/ is the function under test, it is invoked with each row
- of test data in /a/. Typically type F1 is created with Boost.Lambda: see
- the example below.
- Parameter /expect_func/ is a functor that extracts the expected result
- from a row of test data in /a/. Typically type F2 is created with Boost.Lambda: see
- the example below.
- If the function under test returns a non-finite value when a finite result is
- expected, or if a gross error is found, then a message is sent to `std::cerr`,
- and a call to BOOST_ERROR() made (which means that including this header requires
- you use Boost.Test). This is mainly a debugging/development aid
- (and a good place for a breakpoint).
- [h4 Example]
- Suppose we want to test the tgamma and lgamma functions, we can create a
- two dimensional matrix of test data, each row is one test case, and contains
- three elements: the input value, and the expected results for the tgamma and
- lgamma functions respectively.
- static const boost::array<boost::array<TestType, 3>, NumberOfTests>
- factorials = {
- /* big array of test data goes here */
- };
- Now we can invoke the test function to test tgamma:
-
- 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 ...
- //
-
- [endsect][/section:error_test Relative Error and Testing]
- [/
- Copyright 2006 John Maddock and Paul A. Bristow.
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt).
- ]