C++ – Understanding Double Precision

c++floating-point

I think the precision of double is causing that problem, as it was described in similiar posts, but I would like to know if there is a way to achieve correct result. I'm using function template which compares two parameters and returns true if they are equal.

template <class T>
bool eq(T one, T two)
{
  if (one == two)
    return true;
  else
    return false;
}

It works with eq (0.8,0.8), but it doesn't work with eq (0.8*0.2,0.16). As I mentioned I assume it has to do with double precision as it also works fine with int eq(8*2,16).

Best Answer

First you should read one (or both) of these articles: What Every Computer Scientist Should Know About Floating-Point Arithmetic and The Perils of Floating Point.

If you are looking for a solution for your template, I would suggest using template specialization for the cases where T==double and T==float.

Related Question