double ranbeta(double a, double b) { double xa, xb ; if ((a<=0.0) || (b<=0.0)) fatalx("(ranbeta) bad parameters: %9.3f %9.3f\n", a, b) ; xa = rangam(a) ; xb = rangam(b) ; return xa/(xa+xb) ; }
double ranchi (int d) { double y ; y = 2.0 * rangam(0.5 * (double) d) ; return y ; }
void randirichlet(double *x, double *pp, int n) /** generate dirichlet r.v. parameters pp */ { double y ; int i ; for (i=0; i<n; i++) { x[i] = rangam(pp[i]) ; } bal1(x,n) ; }
double rant(double df) // t distribution df > 0 { static double p = -1, olddf = -1.0 ; static double zkon ; double y ; if (df <=- 0.0) fatalx("(rant) %9.3f\n") ; p = df/2.0 ; zkon = sqrt(p) ; // variance of t is p/(p-1) if p > 1 y = rangam(p) ; if (y==0.0) y = p ; // special case to avoid overflow ; return gauss() * zkon / sqrt(y) ; }
void randirichlet(double *x, double *pp, int n) /** generate dirichlet r.v. parameters pp */ { int i ; vzero(x, n) ; for (i=0; i<n; i++) { if (pp[i] > 0.0) { x[i] = rangam(pp[i]) ; } } bal1(x,n) ; }
double gds( double a) { return rangam(a) ; }