c++ - Floating point equality and tolerances -
comparing 2 floating point number a_float == b_float looking trouble since a_float / 3.0 * 3.0 might not equal a_float due round off error.
what 1 fabs(a_float - b_float) < tol.
how 1 calculate tol?
ideally tolerance should larger value of 1 or 2 of least significant figures. if single precision floating point number use tol = 10e-6 should right. not work general case a_float might small or might large.
how 1 calculate tol correctly general cases? interested in c or c++ cases specifically.
this blogpost contains example, foolproof implementation, , detailed theory behind http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ 1 of series, can read more. in short: use ulp numbers, use epsilon numbers near zero, there still caveats. if want sure floating point math recommend reading whole series.
Comments
Post a Comment