laura wrote:

Hi,

I have a variable of type double.

I need to know if there is an integer number store there. How can I

test that ?

I also have a default precision for doing this operation.

In addition to the following kind of test, think about whether the

ceil() or floor() functions might provide you a test. Consider whether

using them leads to a more reliable test or a more efficient one.

The newer functions round(), trunc(), rint, and nearbyint() might also

provide you with suitable tests. The rint() might be what you want,

since it raises the "inexact" floating point exception if the argument

is not an integer. You might find that learning how to handle floating

point exceptions is not what you want to be doing now, though. If you

do, check your text for a discussion of the <fenv.hheader. If your

implementation does not provide such a header, then don't bother.

#include <stdio.h>

#include <math.h>

int main(void)

{

int i;

double base = 4080., testv, intpart, fraction;

for (i = 2; i <= 20; i++) {

testv = base / i;

printf("Testing %g: ", testv);

fraction = modf(testv, &intpart);

if (fraction) {

printf("fractional part = %g\n"

" so probably not an integer.\n"

"integer part = %g.\n\n", fraction, intpart);

}

else {

printf("fractional part test == 0,\n" " so an integer.\n"

"integer part = %g.\n\n", intpart);

}

}

return 0;

}

Testing 2040: fractional part test == 0,

so an integer.

integer part = 2040.

Testing 1360: fractional part test == 0,

so an integer.

integer part = 1360.

Testing 1020: fractional part test == 0,

so an integer.

integer part = 1020.

Testing 816: fractional part test == 0,

so an integer.

integer part = 816.

Testing 680: fractional part test == 0,

so an integer.

integer part = 680.

Testing 582.857: fractional part = 0.857143

so probably not an integer.

integer part = 582.

Testing 510: fractional part test == 0,

so an integer.

integer part = 510.

Testing 453.333: fractional part = 0.333333

so probably not an integer.

integer part = 453.

Testing 408: fractional part test == 0,

so an integer.

integer part = 408.

Testing 370.909: fractional part = 0.909091

so probably not an integer.

integer part = 370.

Testing 340: fractional part test == 0,

so an integer.

integer part = 340.

Testing 313.846: fractional part = 0.846154

so probably not an integer.

integer part = 313.

Testing 291.429: fractional part = 0.428571

so probably not an integer.

integer part = 291.

Testing 272: fractional part test == 0,

so an integer.

integer part = 272.

Testing 255: fractional part test == 0,

so an integer.

integer part = 255.

Testing 240: fractional part test == 0,

so an integer.

integer part = 240.

Testing 226.667: fractional part = 0.666667

so probably not an integer.

integer part = 226.

Testing 214.737: fractional part = 0.736842

so probably not an integer.

integer part = 214.

Testing 204: fractional part test == 0,

so an integer.

integer part = 204.