#include <stdio.h>

int main()
{
  float f = 1.0;
  while(1)
  {
    volatile float g = f + 1000000.0;
    if((g - 1000000.0) != f)
    {
      printf("last integral million float = %f\n", f);
      break;
    }
    if(g == f)
    {
      printf("can't increment a million past float %f\n", f);
      break;
    }
    f = g;
  }
  while(1)
  {
    volatile float g = f + 1.0;
    if((g - 1.0) != f)
    {
      printf("last integral float = %f\n", f);
      break;
    }
    if(g == f)
    {
      printf("can't increment past %f\n", f);
      break;
    }
    f = g;
  }
  double d = 1.0;
  while(1)
  {
    volatile double e = d + 1000000000.0;
    if((e - 1000000000.0) != d)
    {
      printf("last integral billion double = %f\n", float(d));
      break;
    }
    if(e == d)
    {
      printf("can't increment a billion past double %f\n", float(d));
      break;
    }
    d = e;
  }
  while(1)
  {
    volatile double e = d + 1000000.0;
    if((e - 1000000.0) != d)
    {
      printf("last integral million double = %f\n", float(d));
      break;
    }
    if(e == d)
    {
      printf("can't increment a million past double %f\n", float(d));
      break;
    }
    d = e;
  }
  while(1)
  {
    volatile double e = d + 1.0;
    if((e - 1.0) != d)
    {
      printf("last integral double = %f\n", float(d));
      break;
    }
    if(e == d)
    {
      printf("can't increment past %f\n", float(d));
      break;
    }
    d = e;
  }
  return 0;
}

