Listing 2

#include <stdio.h>

FILE *ofp;

void main( void ) {

  double big, small;
  float  fbig, fsmall;
  int    flag[4], power;
  
  ofp = fopen( "roundoff.out", "w" );
  
  big = small = 1.0;
  fbig = (float)big;
  
  for( power = 1; power <= 50; power++ ) {
  
      small *= 0.1;
      fsmall = (float)small;
      flag[0] = flag[1] = flag[2] = flag[3] = 1;
      
      if( big+small == big )
             flag[0] = 0;
      if( (big+small) == big )
             flag[1] = 0;
      
      if( fbig+fsmall == fbig )
             flag[2] = 0;
      if( (fbig+fsmall) == fbig )
             flag[3] = 0;
      
      printf( "Power = %2d, Big+Small = %e, Flags = %d %d %d %d\n",
             power, big+small, flag[0], flag[1], flag[2], flag[3] );
      fprintf( ofp, "Power = %2d, Big+Small = %e, Flags = %d %d %d %d\n",
             power, big+small, flag[0], flag[1], flag[2], flag[3] );
      }
}