/* @(#)gcf.c 17.1.1.1 (ES0-DMD) 01/25/02 17:26:59 */ /*=========================================================================== Copyright (C) 1995 European Southern Observatory (ESO) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Massachusetss Ave, Cambridge, MA 02139, USA. Corresponding concerning ESO-MIDAS should be addressed as follows: Internet e-mail: midas@eso.org Postal address: European Southern Observatory Data Management Division Karl-Schwarzschild-Strasse 2 D 85748 Garching bei Muenchen GERMANY ===========================================================================*/ /* @(#)gcf.c 17.1.1.1 (ESO) 01/25/02 17:26:59 */ #include #define ITMAX 100 #define EPS 3.0e-7 void gcf(gammcf,a,x,gln) double a,*gammcf,*gln; float x; { int n; double gold=0.0,g,fac=1.0,b1=1.0; double b0=0.0,anf,ana,an,a1,a0=1.0; double gammln(); void nrerror(); *gln=gammln(a); a1=x; for (n=1;n<=ITMAX;n++) { an=(double) n; ana=an-a; a0=(a1+a0*ana)*fac; b0=(b1+b0*ana)*fac; anf=an*fac; a1=(double)x*a0+anf*a1; b1=(double)x*b0+anf*b1; if (a1) { fac=1.0/a1; g=b1*fac; if (fabs((g-gold)/g) < EPS) { *gammcf=exp(-x+a*log(x)-(*gln))*g; return; } gold=g; } } nrerror("a too large, ITMAX too small in routine GCF"); } #undef ITMAX #undef EPS