mercredi 4 novembre 2015

INT_MAX does not behave right in an If-Statement

My C-Program performs a "Turmrechnung"(A predefined number("init_num" gets multiplied with a predefined range of numbers(init_num*2*3*4*5*6*7*8*9 in my case, defined by the variable "h"), and after that it is divided by those same numbers and the result should be the initial value of "init_num". My task is to integrate a way to stop the calculation if the value of init_num becomes larger than INT_MAX(from limits.h). But the If-Statement is always true, even if it is not, in case of a larger initial value of "init_num", which results in values bigger than INT_MAX along the way of the calculation.

It only works if i replace "INT_MAX" with a smaller number than INT_MAX like 200000000 in my If-Statement. Why?

#include <limits.h>
#include <stdio.h>

int main() {
  int init_num = 1000000;
  int h = 9;

  for (int i = 2; i < h+1; ++i)
  {
    if (init_num * i < INT_MAX)
    {
      printf("%10i %s %i\n", init_num, "*", i);
      init_num *= i;
    }
    else
    {
      printf("%s\n","An overflow has occurred!");
      break;
    }
  }
  for (int i = 2; i < h+1; ++i)
  {
    printf("%10i %s %i\n", init_num, ":", i);
    init_num /= i;
  }
  printf("%10i\n", init_num);


}

Aucun commentaire:

Enregistrer un commentaire