Search code examples
calgorithmdecimalfactorization

How to find out in C whether a double number has any digits after decimal point


I stumbled on one issue while I was implementing in C the given algorithm:

int getNumberOfAllFactors(int number) {

  int counter = 0;
  double sqrt_num = sqrt(number);
  for (int i = 1; i <= sqrt_num; i++) {
      if ( number % i == 0) {
          counter = counter + 2;
      }
  }
  if (number == sqrt_num * sqrt_num)
      counter--;

  return counter;
}

– the reason for second condition – is to make a correction for perfect squares (i.e. 36 = 6 * 6), however it does not avoid situations (false positives) like this one:

sqrt(91) = 18.027756377319946
18.027756377319946 * 18.027756377319946 = 91.0

So my questions are: how to avoid it and what is the best way in C language to figure out whether a double number has any digits after decimal point? Should I cast square root values from double to integers?


Solution

  • In your case, you could test it like this:

    if (sqrt_num == (int)sqrt_num)