]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/mathlib/gen/v/rangam.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / mathlib / gen / v / rangam.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1996/04/01 15:02:55 mclareni
6* Mathlib gen
7*
8*
9#include "gen/pilot.h"
10 FUNCTION RANGAM(P)
11C THIS FUNCTION GENERATES A GAMMA DISTRIBUTED RANDOM NUMBER
12C WITH PARAMETER P .GT.0.
13C THE JOHNK S ALGORITHM IS USED
14 DIMENSION STOR(20)
15 RANGAM=0.
16 IF(P.GT.15.) GO TO 40
17 M=INT(P)
18 F=P-M
19 IF(M.EQ.0) GO TO 20
20 X=1.
21 CALL NRAN(STOR,M)
22 DO 1 I=1,M
23 1 X = X * STOR(I)
24 RANGAM=-LOG(X)
25 20 IF ( F .LT. 1.0E-5) RETURN
26C
27 X1=-LOG(RNDM(3))
28 IF (F .LT. 0.9999) GO TO 25
29 22 RANGAM = RANGAM + X1
30 RETURN
31C NON-INTEGER VALUE OF P
32 25 CONTINUE
33C ....W1=R1**(1/F)
34 WLOG = LOG (RNDM (1) ) / F
35 IF (WLOG .LT. -100.) RETURN
36 W1 = EXP(WLOG)
37C ....W2=R2**(1/(1-F))
38 WLOG = LOG(RNDM(2)) / (1.-F)
39 IF (WLOG .LT. -100.) GO TO 22
40 W2 = EXP(WLOG)
41 W=W1+W2
42 IF(W.GT.1.) GO TO 25
43 X2=W1/W
44 RANGAM=RANGAM+X1*X2
45 RETURN
46C
47C WILSON - HILFERTY APPROXIMATION
48#if (defined(CERNLIB_IBM)||defined(CERNLIB_CDC))&&(!defined(CERNLIB_FORTRAN))
49 40 CALL NORRAN(A)
50#endif
51#if (!defined(CERNLIB_IBM)||defined(CERNLIB_FORTRAN))&&(!defined(CERNLIB_CDC)||defined(CERNLIB_FORTRAN))
52 40 CALL RANNOR(A,B)
53#endif
54 Q=1.-1./(9.*P)+A/(3.*SQRT(P))
55 RANGAM=P*Q*Q*Q
56 IF (RANGAM.LE.0.) GO TO 40
57 RETURN
58 END