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"
18 C Calculates the complementary incomplete gamma function G(A,X)
19 C as defined in Ref. 1. Based on
20 C 1. W. Gautschi, ALGORITHM 542 Incomplete Gamma Functions,
21 C ACM Trans. Math. Software 5 (1979) 482-489
22 C 2. W. Gautschi, A computational procedure for incomplete gamma
23 C functions, ACM Trans. Math. Software 5 (1979) 466-481
27 #if !defined(CERNLIB_DOUBLE)
28 PARAMETER (NAME = 'RGAGNC')
30 #if defined(CERNLIB_DOUBLE)
31 PARAMETER (NAME = 'RGAGNC/DGAGNC')
34 PARAMETER (EPS = 5D-14)
35 PARAMETER (ALH = -0.69314 71805 59945 31D0)
36 PARAMETER (Z1 = 1, HALF = Z1/2, QUAR = Z1/4)
37 PARAMETER (C1 = 3*Z1/2, KMAX = 600, EPS1 = EPS/100)
41 DATA C( 1) / 0.57721 56649 01532 86D0/
42 DATA C( 2) /-0.65587 80715 20253 88D0/
43 DATA C( 3) /-0.04200 26350 34095 24D0/
44 DATA C( 4) / 0.16653 86113 82291 49D0/
45 DATA C( 5) /-0.04219 77345 55544 34D0/
46 DATA C( 6) /-0.00962 19715 27876 97D0/
47 DATA C( 7) / 0.00721 89432 46663 10D0/
48 DATA C( 8) /-0.00116 51675 91859 07D0/
49 DATA C( 9) /-0.00021 52416 74114 95D0/
50 DATA C(10) / 0.00012 80502 82388 12D0/
51 DATA C(11) /-0.00002 01348 54780 79D0/
52 DATA C(12) /-0.00000 12504 93482 14D0/
53 DATA C(13) / 0.00000 11330 27231 98D0/
54 DATA C(14) /-0.00000 02056 33841 70D0/
55 DATA C(15) / 0.00000 00061 16095 10D0/
56 DATA C(16) / 0.00000 00050 02007 64D0/
57 DATA C(17) /-0.00000 00011 81274 57D0/
58 DATA C(18) / 0.00000 00001 04342 67D0/
59 DATA C(19) / 0.00000 00000 07782 26D0/
60 DATA C(20) /-0.00000 00000 03696 81D0/
61 DATA C(21) / 0.00000 00000 00510 04D0/
62 DATA C(22) /-0.00000 00000 00020 58D0/
63 DATA C(23) /-0.00000 00000 00005 35D0/
64 DATA C(24) / 0.00000 00000 00001 23D0/
65 DATA C(25) /-0.00000 00000 00000 12D0/
67 #if defined(CERNLIB_DOUBLE)
70 #if !defined(CERNLIB_DOUBLE)
77 CALL MTLPRT(NAME,'C334.1',ERRTXT)
83 CALL MTLPRT(NAME,'C334.2','ILLEGAL ARGUMENTS A = X = 0')
101 ALGP1=GLGAMA(1+AEPS)-LOG(ABS(AEPS))
102 IF(MA .NE. 1) ALGP1=ALGP1+GLGAMA(1-AEPS)-GLGAMA(MA-AEPS)
115 IF(ABS(TERM) .LE. EPS*SUM) GO TO 2
118 2 H=1-EXP(A*ALX-X+LOG(SUM)-ALGP1)
119 ELSEIF(X .GT. C1) THEN
136 IF(ABS(TERM) .LE. EPS*SUM) GO TO 4
142 H=EXP(A*ALX-X+LOG(A*SUM/(X+1-A))-ALGP1)
147 IF(A .LT. -HALF) AE=AEPS
153 IF(ABS(Y) .GE. 1) THEN
161 IF(ABS(TERM) .LE. EPS1*SUM) GO TO 8
167 U=EXP(GLGAMA(A))-X**A/A
180 IF(ABS(TERM) .LE. EPS1*SUM) GO TO 10
183 10 H=U+SUM*X**(AE+1)/(AE+1)
184 IF(A .LT. -HALF) THEN
188 ELSEIF(A .LE. 0) THEN
194 #if defined(CERNLIB_DOUBLE)
197 #if !defined(CERNLIB_DOUBLE)
202 98 WRITE(ERRTXT,103) A,X
203 CALL MTLPRT(NAME,'C334.3',ERRTXT)
205 101 FORMAT('ILLEGAL ARGUMENT X = ',1P,E15.6,' < 0')
206 103 FORMAT('PROBLEMS WITH CONVERGENCE, A = ',1P,E15.8,' X = ',E15.6)