
#define MAX_IDX 256

extern double exp(double);

double args[MAX_IDX];
double res[MAX_IDX];

void init () {
for(int i = -MAX_IDX+2; i<=MAX_IDX; i+=2) {
  args[(MAX_IDX+i)/2-1] = exp(i);
  res[(MAX_IDX+i)/2-1] = exp(i/2);
 }
}

int main () {
  init();
  double x = 3.
  int i;
  double d;
  for (i = 0; i<MAX_IDX && args[i] < x; i++);
  if (i==MAX_IDX) d = res[MAX_IDX];
  else if (x-args[i] < args[i+1] - x) d = res[i];
  else d = res[i+1];
  for(int j = 0; j < 4; j++) {
    d = (d + x/d) / 2.;
  }
  return 0;
}
