/* pctg.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.)
* ------------------------------------------------------------------------
*/
#include <math.h>
static double te=1.e-9;
double pctg(double pc,double a)
{ double x,y,s,t; int k;
double qgama(double,double),gaml(double),pctn(double);
if(pc<te || pc>1.-te) return -1.;
if(a<.5){
x=exp((gaml(a+1.)+log(1.-pc))/a);
if(x==0.) return -1.;
}
else{
y=pctn(pc); s=1./(9.*a);
s=pow(1.-s+y*sqrt(s),3.); x=a*s;
if(x<te) x=te;
}
s=gaml(a); k=0;
do{ y=exp((a-1.)*log(x)-x-s); t=pc-qgama(x,a);
x-=t/y; ++k;
}while(fabs(t)>te && k<200);
if(k>=200) return -1.; else return x;
}
syntax highlighted by Code2HTML, v. 0.9.1