numerical precision of a double

Dear C experts,

Could anyone tell me what the numerical precision of a double is in C? I read about the smallest and largest numbers I can store in a double, but what I really need to know is how many significant digits after the decimal point are "to be trusted"? Is it a 16-digit mantissa in scientific notation?

Besides understanding this issue, I have a practical need to know this. I want to use a function to compare doubles. Something like

Code:

`#define Abs(x) ((x) < 0 ? -(x) : (x))`

#define Max(a, b) ((a) > (b) ? (a) : (b))

double RelativeDifference(double a, double b)

{

double c = Abs(a);

double d = Abs(b);

d = Max(c, d);

return d == 0.0 ? 0.0 : Abs(a - b) / d;

}

So, a good condition for two doubles to be the same would be

Code:

`if ( RelativeDifference(x,y) < TOLERANCE )`

Thus, what is a good value for TOLERANCE? 1E(-16)?

Thank you very much,

mc61