5 * Revision 1.1.1.1 1996/04/01 15:02:43 mclareni
10 C This will be GAMDIS,IF=DOUBLE and GAMDIS64,IF=-DOUBLE
13 C Calculates the gamma distribution function
15 C G(x,a) = (1/gamma(a)) * int(0,x)[exp(-t) * t**(a-1)] dt.
18 C W. Gautschi, ALGORITHM 542 Incomplete Gamma Functions,
19 C ACM Trans. Math. Software 5 (1979) 482-489.
23 PARAMETER (NAME = 'GAMDIS')
26 PARAMETER (EPS = 1E-5, EPS1 = 5E-7)
27 PARAMETER (ALH = -0.69314 72)
28 PARAMETER (Z1 = 1, HALF = Z1/2, QUAR = Z1/4)
29 PARAMETER (C1 = 3*Z1/2, KMAX = 300)
32 1/ 0.5772157,-0.6558781,-0.0420026, 0.1665386,-0.0421977,
33 2 -0.0096220, 0.0072189,-0.0011652,-0.0002152, 0.0001281,
34 3 -0.0000201,-0.0000013, 0.0000011,-0.0000002/
38 IF(X .LT. 0 .OR. A .LE. 0) THEN
40 CALL MTLPRT(NAME,'G106.1',ERRTXT)
56 IF(ABS(TERM) .LE. EPS*SUM) GO TO 2
59 2 HST=SUM*EXP(A*ALX-X-ALOGAM(1+A))
60 ELSEIF(X .GT. C1) THEN
77 IF(ABS(TERM) .LE. EPS*SUM) GO TO 4
80 4 HST=1-(A*SUM/(X+1-A))*EXP(A*ALX-X-ALOGAM(1+A))
88 IF(ABS(Y) .GE. 1) THEN
96 IF(ABS(TERM) .LE. EPS1*SUM) GO TO 8
102 U=GAMMA(A)-EXP(A*ALX)/A
115 IF(ABS(TERM) .LE. EPS1*SUM) GO TO 10
118 10 HST=1-A*(U+SUM*EXP((1+A)*ALX)/(1+A))/GAMMA(1+A)
123 98 WRITE(ERRTXT,102) X,A
124 CALL MTLPRT(NAME,'G106.2',ERRTXT)
126 101 FORMAT('ILLEGAL ARGUMENT(S) X = ',E15.8,' A = ',E15.8)
127 102 FORMAT('PROBLEMS WITH CONVERGENCE, X = ',E15.8,' A = ',E15.8)