Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between BOOST_CHECK_CLOSE and BOOST_CHECK_CLOSE_FRACTION?

Tags:

boost

Can anyone describe the difference in behavior between BOOST_CHECK_CLOSE and BOOST_CHECK_CLOSE_FRACTION? The documentation implies the that both macros treat their third parameter identically, which makes me suspect the documentation is wrong.

In particular, BOOST_CHECK_CLOSE_FRACTION gives me some odd looking results:

error in "...": difference between *expected{0} and *actual{-1.7763568394002506e-16} exceeds 9.9999999999999995e-07

Is there a gotcha because I expect a zero result? I've not been successful at reading through the underlying macro declarations. Please note BOOST_CHECK_SMALL isn't appropriate for my use case (comparing two vectors after a linear algebra operation).

like image 898
Rhys Ulerich Avatar asked Jul 07 '09 16:07

Rhys Ulerich


2 Answers

According to this discussion, one (BOOST_CHECK_CLOSE) treats the third parameter as expressing a percent, while the other (BOOST_CHECK_CLOSE_FRACTION) treats it as expressing a fraction. So, .01 in the first should be equivalent to .0001 in the second.

Not certain if that explains your problem -- do you get the same odd result with BOOST_CHECK_CLOSE? I wouldn't be shocked if the 0 caused an issue -- but I don't have first hand experience with the macros.

like image 97
Richard Dunlap Avatar answered Sep 22 '22 13:09

Richard Dunlap


Yes. Zero is not "close" to any value. You can use BOOST_CHECK_SMALL instead.

like image 7
Gennadiy Rozental Avatar answered Sep 24 '22 13:09

Gennadiy Rozental