/* @(#)gser.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 ===========================================================================*/ /* @(#)gser.c 17.1.1.1 (ESO) 01/25/02 17:26:59 */ #include #define ITMAX 100 #define EPS 3.0e-7 void gser(gamser,a,x,gln) double a,*gamser,*gln; float x; { int n; double sum,del,ap; double gammln(); void nrerror(); *gln=gammln(a); if (x <= 0.0) { if (x < 0.0) nrerror("x less than 0 in routine GSER"); *gamser=0.0; return; } else { ap=a; del=sum=1.0/a; for (n=1;n<=ITMAX;n++) { ap += 1.0; del *= (double)x/ap; sum += del; if (fabs(del) < fabs(sum)*EPS) { *gamser=sum*exp(-x+a*log(x)-(*gln)); return; } } nrerror("a too large, ITMAX too small in routine GSER"); return; } } #undef ITMAX #undef EPS