/*  secrt.c    CCMATH mathematics library source code.
 *
 *  Copyright (C)  2000   Daniel A. Atkinson    All rights reserved.
 *  This code may be redistributed under the terms of the GNU library
 *  public license (LGPL). ( See the lgpl.license file for details.)
 * ------------------------------------------------------------------------
 */
double secrt(double (*func)(),double x,double dx,double test)
{ double f,fp,y; int k;
  y=x-dx; fp=(*func)(y);
  for(k=0;;++k){ f=(*func)(x);
    dx=f*(x-y)/(f-fp); fp=f; y=x; x-=dx;
    if(((dx<0.)?-dx:dx)<test || k==50)
      return x;
   }
}


syntax highlighted by Code2HTML, v. 0.9.1