下のプログラムについてですが、
d += 0.5;
だと途中で整数になるのに、
d += 0.1;
だと動作がおかしいんです。

#include <stdio.h>

void isInteger(double d)
{
  if(d == (int)d){
    printf("I: %20.15f\n", d);
  }else{
    printf("D: %20.15f\n", d);
  }
}

int main(int ac, char **av)
{
  int i;
  double d = 0.0;

  for(i = 0; i < 50; i++){
    d += 0.1;
    isInteger(d);
  }

  return 0;
}