
At Monday 2004-07-26 10:33, you wrote:
In setting up a test for math function accuracy, I incorrectly coded thus:
BOOST_CHECK_EQUAL(sin(0.5), 0.479426);
and got the somewhat puzzling - apparently wrong - message
error in "call_test_main": test sin(0.5) == 0.479426 failed [0.479426 != 0.479426]
On most days of the week, one would expect [0.479426 == 0.479426]!
I should of course have written
BOOST_CHECK_EQUAL(sin(0.5), 0.47942553860420301);
(or used
BOOST_CHECK_CLOSE(sin(0.5), 0.47942553860420301, 1e-16);)
But I wonder if the test program would be even more helpful if it output all possibly significant digits.
In test_tools.hpp, I have added an increase to the ostream precision (default only 6 digits) int print_log_value thus
template<typename T> struct print_log_value { void operator()( std::ostream& ostr, T const& t ) { if(std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::radix == 2) { // Show all possibly significant digits (for example, 17 for 64-bit double). ostr.precision(2 + std::numeric_limits<T>::digits * 301/1000);
is there some reason you didn't: ostr.precision(2 + std::numeric_limits<T>::digits10); instead of estimating log(2)? (301/1000)
} ostr << t; // by default print the value. } };
so that the message is no longer
test sin(0.5) == 0.479426 failed [0.47942553860420301 != 0.47942600000000002]
and my folly obvious.
And after the original mistake is corrected
BOOST_CHECK_EQUAL(sin(0.5), 0.47942553860420301);
The log file reports:
info: sin(0.5) == 0.47942553860420301 passed.
Paul
PS (It does not appear to possible to change the precision 'externally' by calling
cout.precision(17);
myTestLog.precision(17);
probably because ostr in test is contructed with default precision).
Paul A Bristow Prizet Farmhouse, Kendal, Cumbria UK LA8 8AB +44 1539 561830 +44 7714 330204 mailto: pbristow@hetp.u-net.com
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Victor A. Wagner Jr. http://rudbek.com The five most dangerous words in the English language: "There oughta be a law"