|
Go to the documentation of this file.
22 #define MODULUS 2147483647
23 #define MULTIPLIER 48271
24 #define CHECK 399268537
27 #define DEFAULT 123456789
100 long i =(long) floor((( double) a)*(1-q)+(( double)b)*q);
118 FD_DS( "Ran_exponential(): empty interval");
122 double lb= -expm1(-( static_cast<double> (tossLB))/ mu);
123 double ub= -expm1(-( static_cast<double> (tossUB))/ mu);
125 double ret=(-mu*(log(1-u)));
134 FD_DS( "Ran_gauss(): empty interval");
139 double ztossLB=( static_cast<double>(tossLB)-mu)/sigma;
140 double ztossUB=( static_cast<double>(tossUB)-mu)/sigma;
150 static const double a[] =
152 -3.969683028665376e+01,
153 2.209460984245205e+02,
154 -2.759285104469687e+02,
155 1.383577518672690e+02,
156 -3.066479806614716e+01,
157 2.506628277459239e+00
160 static const double b[] =
162 -5.447609879822406e+01,
163 1.615858368580409e+02,
164 -1.556989798598866e+02,
165 6.680131188771972e+01,
166 -1.328068155288572e+01
169 static const double c[] =
171 -7.784894002430293e-03,
172 -3.223964580411365e-01,
173 -2.400758277161838e+00,
174 -2.549732539343734e+00,
175 4.374664141464968e+00,
176 2.938163982698783e+00
179 static const double d[] =
181 7.784695709041462e-03,
182 3.224671290700398e-01,
183 2.445134137142996e+00,
184 3.754408661907416e+00
187 if(u<0 || u>1) zret=0.0;
189 FD_DS( "Ran_gauss(): u="<<u<< "ret=HUGE_VAL");
193 FD_DS( "Ran_gauss(): u="<<u<< "ret=-HUGE_VAL");
199 zret=(((((c[0]*q+c[1])*q+c[2])*q+c[3])*q+c[4])*q+c[5]) /
200 ((((d[0]*q+d[1])*q+d[2])*q+d[3])*q+1);
204 q = sqrt(-2*log(1-u));
205 zret= -(((((c[0]*q+c[1])*q+c[2])*q+c[3])*q+c[4])*q+c[5]) /
206 ((((d[0]*q+d[1])*q+d[2])*q+d[3])*q+1);
212 zret=(((((a[0]*r+a[1])*r+a[2])*r+a[3])*r+a[4])*r+a[5])*q /
213 (((((b[0]*r+b[1])*r+b[2])*r+b[3])*r+b[4])*r+1);
216 double ret=(zret*sigma)+mu;
225 const double PI = 3.141592654;
226 const double b1 = 0.319381530;
227 const double b2 = -0.356563782;
228 const double b3 = 1.781477937;
229 const double b4 = -1.821255978;
230 const double b5 = 1.330274429;
231 const double p = 0.2316419;
234 double t = 1.0 / (1.0 + p*x);
235 return (1.0 - (1/sqrt(2*PI))*exp(-x*x/2.0 )*t*
236 (t*(t*(t*(t*b5 + b4) + b3) + b2) + b1));
239 double t = 1.0 / ( 1.0 - p * x );
240 return ( (1/sqrt(2*PI))*exp(-x*x/2.0 )*t*
241 (t*(t*(t*(t*b5 + b4) + b3) + b2) + b1));
double ran_gauss(double mu, double sigma, Time::Type tossLB, Time::Type tossUB)
long ran_uniform_int(long a, long b)
void ran_put_seed(long seed)
double ran_exponential(double mu)
void ran_plant_seeds(long x)
void ran_select_stream(int index)
double ran_gaussian_cdf_P(double x)
double ran_uniform(double a, double b)
static long ran_seed[STREAMS]
static int ran_initialized
libFAUDES 2.33c
--- 2025.05.15
--- c++ api documentaion by doxygen
|