]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PDF/spdf/gammado.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / PDF / spdf / gammado.F
diff --git a/PDF/spdf/gammado.F b/PDF/spdf/gammado.F
new file mode 100644 (file)
index 0000000..45d289d
--- /dev/null
@@ -0,0 +1,81 @@
+*
+* $Id$
+*
+* $Log$
+* Revision 1.1.1.2  1996/10/30 08:28:27  cernlib
+* Version 7.04
+*
+* Revision 1.1.1.1  1996/04/12 15:29:22  plothow
+* Version 7.01
+*
+*
+#include "pdf/pilot.h"
+C
+C     ..................................................................
+C
+C        SUBROUTINE GAMMADO
+C
+C        PURPOSE
+C           COMPUTES THE GAMMADO FUNCTION FOR A GIVEN ARGUMENT
+C
+C        USAGE
+C           CALL GAMMADO(XX,GX,IER)
+C
+C        DESCRIPTION OF PARAMETERS
+C           XX -THE ARGUMENT FOR THE GAMMADO FUNCTION
+C           GX -THE RESULTANT GAMMADO FUNCTION VALUE
+C           IER-RESULTANT ERROR CODE WHERE
+C               IER=0  NO ERROR
+C               IER=1  XX IS WITHIN .000001 OF BEING A NEGATIVE INTEGER
+C               IER=2  XX GT 34.5, OVERFLOW, GX SET TO 1.0E38
+C
+C        REMARKS
+C           NONE
+C
+C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
+C           NONE
+C
+C        METHOD
+C           THE RECURSION RELATION AND POLYNOMIAL APPROXIMATION
+C           BY C.HASTINGS,JR., 'APPROXIMATIONS FOR DIGITAL COMPUTERS',
+C           PRINCETON UNIVERSITY PRESS, 1955
+C
+C     ..................................................................
+C
+      SUBROUTINE GAMMADO(XX,GX,IER)
+      IF(XX-34.5)6,6,4
+    4 IER=2
+      GX=1.E38
+      RETURN
+    6 X=XX
+      ERR=1.0E-6
+      IER=0
+      GX=1.0
+      IF(X-2.0)50,50,15
+   10 IF(X-2.0)110,110,15
+   15 X=X-1.0
+      GX=GX*X
+      GO TO 10
+   50 IF(X-1.0)60,120,110
+C
+C        SEE IF X IS NEAR NEGATIVE INTEGER OR ZERO
+C
+   60 IF(X-ERR)62,62,80
+   62 Y=FLOAT(INT(X))-X
+      IF(ABS(Y)-ERR)130,130,64
+   64 IF(1.0-Y-ERR)130,130,70
+C
+C        X NOT NEAR A NEGATIVE INTEGER OR ZERO
+C
+   70 IF(X-1.0)80,80,110
+   80 GX=GX/X
+      X=X+1.0
+      GO TO 70
+  110 Y=X-1.0
+      GY=1.0+Y*(-0.5771017+Y*(+0.9858540+Y*(-0.8764218+Y*(+0.8328212+
+     1Y*(-0.5684729+Y*(+0.2548205+Y*(-0.05149930)))))))
+      GX=GX*GY
+  120 RETURN
+  130 IER=1
+      RETURN
+      END