home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / NRPAS13 / GCF.PAS < prev    next >
Pascal/Delphi Source File  |  1991-04-29  |  773b  |  35 lines

  1. PROCEDURE gcf(a,x: real; VAR gammcf,gln: real);
  2. LABEL 1;
  3. CONST
  4.    itmax=100;
  5.    eps=3.0e-7;
  6. VAR
  7.    n: integer;
  8.    gold,g,fac,b1,b0,anf,ana,an,a1,a0: real;
  9. BEGIN
  10.    gln := gammln(a);
  11.    gold := 0.0;
  12.    a0 := 1.0;
  13.    a1 := x;
  14.    b0 := 0.0;
  15.    b1 := 1.0;
  16.    fac := 1.0;
  17.    FOR n := 1 TO itmax DO BEGIN
  18.       an := 1.0*n;
  19.       ana := an-a;
  20.       a0 := (a1+a0*ana)*fac;
  21.       b0 := (b1+b0*ana)*fac;
  22.       anf := an*fac;
  23.       a1 := x*a0+anf*a1;
  24.       b1 := x*b0+anf*b1;
  25.       IF (a1 <> 0.0) THEN BEGIN
  26.          fac := 1.0/a1;
  27.          g := b1*fac;
  28.          IF (abs((g-gold)/g) < eps) THEN GOTO 1;
  29.          gold := g
  30.       END
  31.    END;
  32.    writeln('pause in GCF - a too large, itmax too small'); readln;
  33. 1:   gammcf := exp(-x+a*ln(x)-gln)*g
  34. END;
  35.