88#define BETA_TURNING_POINT 2
93#define _Lo(X) ((X)&_Mask)
94#define _Hi(X) (((X)>>16)&_Mask)
125static unsigned Scal=0xFFFFFFFF;
135return( ((
double)*seed)/
Scal );
141double p_dBeta (
double a,
double b,
unsigned int *seed)
145 double u1,u2,p1,p2,x;
153 }
while ((x=u1+u2) > 1);
198 for (i = 0; i < n; i++)
233 while (u == (
double)0)
236 return (-lambda*log(u));
269#define GAMMA_TURNING_POINT 7
275 double x,y,v,sqrt2a1,asub1,y2;
277 sqrt2a1 = sqrt ((
double)(2*a - 1));
283 if ((x = y2 + asub1) <= 0)
286 if (v <= (1+y*y)*exp((asub1)*log(x/asub1)-y2))
315 double b,p,inva, res = 0;
316 double EXP = 2.71828182;
339 res= - log( (b-p)/a);
340 if(
p_dUniform(seed) <= 1.0/pow(res, 1-a))
break;
352 double x,y,v,sqrt2a1,asub1,y2;
354 sqrt2a1 = sqrt (2*A - 1);
360 if ((x = y2 + asub1) <= 0)
363 if (v <= (1+y*y)*exp((asub1)*log(x/asub1)-y2))
390#define GEOMETRIC_TURNING_POINT 0.38
397 return ((
int) ceil(log (
p_dUniform(seed))/log (1-p)));
422double p_dNormal (
double mean,
double sigma,
unsigned int *seed)
425double u1, u2, v1, v2, s;
432return(x2*sigma + mean);
444s= sqrt( -2*log(s)/s);
449return( x1*sigma + mean);
double p_dUniform(unsigned *seed)
double p_dNormal(double mean, double sigma, unsigned int *seed)
int p_iBinomial(double p, int n, unsigned int *seed)
#define BETA_TURNING_POINT
unsigned p_iUniform(unsigned *seed)
double p_dGammaInt(int a, unsigned int *seed)
int p_iGeometric(double p, unsigned int *seed)
#define GAMMA_TURNING_POINT
double p_dExponential(double lambda, unsigned int *seed)
int p_iPoisson(double mu, unsigned *seed)
double p_dGammaGen(double A, unsigned *seed)
#define GEOMETRIC_TURNING_POINT
double p_dBeta(double a, double b, unsigned int *seed)