#include <stdio.h>
#include <math.h>
#define JMAX 50
#define xacc 1e-12

main()
{

  double x1,x2, fx, df, dx, rtn;
  int j;

/* these guess for the range in which a root exists could come from a       */
/* bracketing and bisection algorithm                                       */
 
 x1 = 1.0;
 x2 = 4.0 ;

 rtn = 0.5*(x1+x2);    /* first guess =  midpoint of the interval [x1,x2]   */

for (j=1;j<=JMAX; j++)
{
  fx = rtn*rtn - rtn -1.0;  /* in this case the function is f(x) = x^2-x-1*/
  df = 2*rtn - 1.0;         /* the first derivative is f'(x) = 2x          */
                            /* note that you can change this to be any function */
                            /* you want. Also you could write a C function to 
                            /* evaluate fx and df                               */

  dx = -fx/df;
  rtn += dx;

  printf("%e\n", dx);

  if ((x1-rtn)*(rtn-x2) < 0.0){
	printf("error, jumped outside bounds");
	exit(1);}
  if (fabs(dx) < xacc){
	printf("found root after %d attempts, at %lf\n", j, rtn);
	exit(0); }
}
  printf("error - exceeded max tries no root");

  exit(0);
}