5 * Revision 1.1.1.1 1996/04/01 15:02:05 mclareni
10 #if !defined(CERNLIB_DOUBLE)
13 #if defined(CERNLIB_DOUBLE)
15 #include "gen/imp64.inc"
17 C Calculates the incomplete gamma function P(A,X) as defined by
18 C GSTAR(A,X) in Ref. 1. Based on
19 C 1. W. Gautschi, ALGORITHM 542 Incomplete Gamma Functions,
20 C ACM Trans. Math. Software 5 (1979) 482-489
21 C 2. W. Gautschi, A computational procedure for incomplete gamma
22 C functions, ACM Trans. Math. Software 5 (1979) 466-481
26 #if !defined(CERNLIB_DOUBLE)
27 PARAMETER (NAME = 'RGAPNC')
29 #if defined(CERNLIB_DOUBLE)
30 PARAMETER (NAME = 'RGAPNC/DGAPNC')
32 PARAMETER (EPS = 5D-14)
33 PARAMETER (ALH = -0.69314 71805 59945 31D0)
34 PARAMETER (Z1 = 1, HALF = Z1/2, QUAR = Z1/4)
35 PARAMETER (C1 = 3*Z1/2, KMAX = 600, EPS1 = EPS/100)
39 DATA C( 1) / 0.57721 56649 01532 86D0/
40 DATA C( 2) /-0.65587 80715 20253 88D0/
41 DATA C( 3) /-0.04200 26350 34095 24D0/
42 DATA C( 4) / 0.16653 86113 82291 49D0/
43 DATA C( 5) /-0.04219 77345 55544 34D0/
44 DATA C( 6) /-0.00962 19715 27876 97D0/
45 DATA C( 7) / 0.00721 89432 46663 10D0/
46 DATA C( 8) /-0.00116 51675 91859 07D0/
47 DATA C( 9) /-0.00021 52416 74114 95D0/
48 DATA C(10) / 0.00012 80502 82388 12D0/
49 DATA C(11) /-0.00002 01348 54780 79D0/
50 DATA C(12) /-0.00000 12504 93482 14D0/
51 DATA C(13) / 0.00000 11330 27231 98D0/
52 DATA C(14) /-0.00000 02056 33841 70D0/
53 DATA C(15) / 0.00000 00061 16095 10D0/
54 DATA C(16) / 0.00000 00050 02007 64D0/
55 DATA C(17) /-0.00000 00011 81274 57D0/
56 DATA C(18) / 0.00000 00001 04342 67D0/
57 DATA C(19) / 0.00000 00000 07782 26D0/
58 DATA C(20) /-0.00000 00000 03696 81D0/
59 DATA C(21) / 0.00000 00000 00510 04D0/
60 DATA C(22) /-0.00000 00000 00020 58D0/
61 DATA C(23) /-0.00000 00000 00005 35D0/
62 DATA C(24) / 0.00000 00000 00001 23D0/
63 DATA C(25) /-0.00000 00000 00000 12D0/
65 #if !defined(CERNLIB_DOUBLE)
68 #if defined(CERNLIB_DOUBLE)
75 CALL MTLPRT(NAME,'C334.1',ERRTXT)
80 CALL MTLPRT(NAME,'C334.2',ERRTXT)
98 SG=(-1)**(MA-1)*SIGN(Z1,A)*SIGN(Z1,AEPS)
99 ALGP1=GLGAMA(1+AEPS)-LOG(ABS(AEPS))
100 IF(MA .NE. 1) ALGP1=ALGP1+GLGAMA(1-AEPS)-GLGAMA(MA-AEPS)
115 IF(ABS(TERM) .LE. EPS*SUM) GO TO 2
118 2 HST=EXP(A*ALX-X+LOG(SUM)-ALGP1)
119 ELSEIF(X .GT. C1) THEN
136 IF(ABS(TERM) .LE. EPS*SUM) GO TO 4
141 IF(MA .LT. 0 .OR. AEPS .NE. 0)
142 1 HST=1-SG*EXP(LOG(ABS(A)*SUM/(X+1-A))-X+A*ALX-ALGP1)
143 ELSEIF(A .EQ. 0) THEN
146 HST=1-EXP(A*ALX-X+LOG(A*SUM/(X+1-A))-ALGP1)
151 IF(A .LT. -HALF) AE=AEPS
157 IF(ABS(Y) .GE. 1) THEN
165 IF(ABS(TERM) .LE. EPS1*SUM) GO TO 8
171 U=EXP(GLGAMA(A))-X**A/A
184 IF(ABS(TERM) .LE. EPS1*SUM) GO TO 10
187 10 H=U+X**(AE+1)*SUM/(AE+1)
188 IF(A .LT. -HALF) THEN
193 IF(MA .LT. 0 .OR. AEPS .NE. 0)
194 1 HST=1-SG*EXP(LOG(ABS(A)*H)-X+A*ALX-ALGP1)
195 ELSEIF(A .EQ. 0) THEN
198 HST=1-A*H*EXP(-ALGP1)
201 #if defined(CERNLIB_DOUBLE)
204 #if !defined(CERNLIB_DOUBLE)
209 98 WRITE(ERRTXT,103) A,X
210 CALL MTLPRT(NAME,'C334.3',ERRTXT)
212 101 FORMAT('ILLEGAL ARGUMENT X = ',1P,D15.8,' < 0')
213 102 FORMAT('ILLEGAL ARGUMENTS A = ',1P,D15.8,' < 0, X = 0')
214 103 FORMAT('PROBLEMS WITH CONVERGENCE, A = ',1P,D15.8,' X = ',D15.8)