Blame view

fvn_fnlib/dlbeta.f 991 Bytes
38581db0c   daniau   git-svn-id: https...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
        double precision function dlbeta (a, b)
  c july 1977 edition.   w. fullerton, c3, los alamos scientific lab.
        double precision a, b, p, q, corr, sq2pil, d9lgmc, dgamma, dlngam,
       1  dlnrel, dlog
        external d9lgmc, dgamma, dlngam, dlnrel
        data sq2pil / 0.9189385332 0467274178 0329736405 62 d0 /
  c
        p = dmin1 (a, b)
        q = dmax1 (a, b)
  c
        if (p.le.0.d0) call seteru (
       1  38hdlbeta  both arguments must be gt zero, 38, 1, 2)
  c
        if (p.ge.10.d0) go to 30
        if (q.ge.10.d0) go to 20
  c
  c p and q are small.
  c
        dlbeta = dlog (dgamma(p) * (dgamma(q)/dgamma(p+q)) )
        return
  c
  c p is small, but q is big.
  c
   20   corr = d9lgmc(q) - d9lgmc(p+q)
        dlbeta = dlngam(p) + corr + p - p*dlog(p+q)
       1  + (q-0.5d0)*dlnrel(-p/(p+q))
        return
  c
  c p and q are big.
  c
   30   corr = d9lgmc(p) + d9lgmc(q) - d9lgmc(p+q)
        dlbeta = -0.5d0*dlog(q) + sq2pil + corr + (p-0.5d0)*dlog(p/(p+q))
       1  + q*dlnrel(-p/(p+q))
        return
  c
        end