]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PDF/spdf/gammado.F
CLHEP version set explicitely to 1.5.0.0
[u/mrichter/AliRoot.git] / PDF / spdf / gammado.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.2  1996/10/30 08:28:27  cernlib
6 * Version 7.04
7 *
8 * Revision 1.1.1.1  1996/04/12 15:29:22  plothow
9 * Version 7.01
10 *
11 *
12 #include "pdf/pilot.h"
13 C
14 C     ..................................................................
15 C
16 C        SUBROUTINE GAMMADO
17 C
18 C        PURPOSE
19 C           COMPUTES THE GAMMADO FUNCTION FOR A GIVEN ARGUMENT
20 C
21 C        USAGE
22 C           CALL GAMMADO(XX,GX,IER)
23 C
24 C        DESCRIPTION OF PARAMETERS
25 C           XX -THE ARGUMENT FOR THE GAMMADO FUNCTION
26 C           GX -THE RESULTANT GAMMADO FUNCTION VALUE
27 C           IER-RESULTANT ERROR CODE WHERE
28 C               IER=0  NO ERROR
29 C               IER=1  XX IS WITHIN .000001 OF BEING A NEGATIVE INTEGER
30 C               IER=2  XX GT 34.5, OVERFLOW, GX SET TO 1.0E38
31 C
32 C        REMARKS
33 C           NONE
34 C
35 C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
36 C           NONE
37 C
38 C        METHOD
39 C           THE RECURSION RELATION AND POLYNOMIAL APPROXIMATION
40 C           BY C.HASTINGS,JR., 'APPROXIMATIONS FOR DIGITAL COMPUTERS',
41 C           PRINCETON UNIVERSITY PRESS, 1955
42 C
43 C     ..................................................................
44 C
45       SUBROUTINE GAMMADO(XX,GX,IER)
46       IF(XX-34.5)6,6,4
47     4 IER=2
48       GX=1.E38
49       RETURN
50     6 X=XX
51       ERR=1.0E-6
52       IER=0
53       GX=1.0
54       IF(X-2.0)50,50,15
55    10 IF(X-2.0)110,110,15
56    15 X=X-1.0
57       GX=GX*X
58       GO TO 10
59    50 IF(X-1.0)60,120,110
60 C
61 C        SEE IF X IS NEAR NEGATIVE INTEGER OR ZERO
62 C
63    60 IF(X-ERR)62,62,80
64    62 Y=FLOAT(INT(X))-X
65       IF(ABS(Y)-ERR)130,130,64
66    64 IF(1.0-Y-ERR)130,130,70
67 C
68 C        X NOT NEAR A NEGATIVE INTEGER OR ZERO
69 C
70    70 IF(X-1.0)80,80,110
71    80 GX=GX/X
72       X=X+1.0
73       GO TO 70
74   110 Y=X-1.0
75       GY=1.0+Y*(-0.5771017+Y*(+0.9858540+Y*(-0.8764218+Y*(+0.8328212+
76      1Y*(-0.5684729+Y*(+0.2548205+Y*(-0.05149930)))))))
77       GX=GX*GY
78   120 RETURN
79   130 IER=1
80       RETURN
81       END