distrib.h Source File

API: distrib.h Source File
API
distrib.h
1//==========================================================================
2// DISTRIB.H
3// OMNeT++/OMNEST
4// Discrete System Simulation in C++
5//
6//==========================================================================
7
8// Authors: Werner Sandmann (ws), Kay Michael Masslow (kmm), Kyeong Soo (Joseph) Kim (jk)
9// Documentation, maintenance: Andras Varga
10
11#ifndef __OMNETPP_DISTRIB_H
12#define __OMNETPP_DISTRIB_H
13
14#include "simkerneldefs.h"
15#include "crng.h"
16#include "simtime.h"
17
18namespace omnetpp {
19
26
30inline uint32_t intrand(cRNG *rng, uint32_t r) {return rng->intRand(r);}
31
35inline double dblrand(cRNG *rng) {return rng->doubleRand();}
37
44
51SIM_API double uniform(cRNG *rng, double a, double b);
52
56inline SimTime uniform(cRNG *rng, SimTime a, SimTime b) {return uniform(rng, a.dbl(), b.dbl());}
57
65SIM_API double exponential(cRNG *rng, double mean);
66
70inline SimTime exponential(cRNG *rng, SimTime mean) {return exponential(rng, mean.dbl());}
71
80SIM_API double normal(cRNG *rng, double mean, double stddev);
81
85inline SimTime normal(cRNG *rng, SimTime mean, SimTime stddev) {return normal(rng, mean.dbl(), stddev.dbl());}
86
103SIM_API double truncnormal(cRNG *rng, double mean, double stddev);
104
108inline SimTime truncnormal(cRNG *rng, SimTime mean, SimTime stddev) {return truncnormal(rng, mean.dbl(), stddev.dbl());}
109
145SIM_API double gamma_d(cRNG *rng, double alpha, double theta);
146
159SIM_API double beta(cRNG *rng, double alpha1, double alpha2);
160
179SIM_API double erlang_k(cRNG *rng, unsigned int k, double mean);
180
198SIM_API double chi_square(cRNG *rng, unsigned int k);
199
211SIM_API double student_t(cRNG *rng, unsigned int i);
212
227SIM_API double cauchy(cRNG *rng, double a, double b);
228
238SIM_API double triang(cRNG *rng, double a, double b, double c);
239
251inline double lognormal(cRNG *rng, double m, double w)
252{
253 return exp(normal(rng, m, w));
254}
255
275SIM_API double weibull(cRNG *rng, double a, double b);
276
286SIM_API double pareto_shifted(cRNG *rng, double a, double b, double c);
287
289
296
304SIM_API int intuniform(cRNG *rng, int a, int b);
305
313SIM_API int intuniformexcl(cRNG *rng, int a, int b);
314
324inline int bernoulli(cRNG *rng, double p)
325{
326 double U = rng->doubleRand();
327 return (p > U) ? 1 : 0;
328}
329
342SIM_API int binomial(cRNG *rng, int n, double p);
343
356SIM_API int geometric(cRNG *rng, double p);
357
370SIM_API int negbinomial(cRNG *rng, int n, double p);
371
372//
373// hypergeometric() doesn't work yet
374//
375// /* *
376// * Returns a random integer from the hypergeometric distribution with
377// * parameters a,b and n.
378// *
379// * If you have a+b items (a items of type A and b items of type B)
380// * and you draw n items from them without replication, this function
381// * will return the number of type A items in the drawn set.
382// *
383// * Generation uses inverse transform due to Fishman (see Banks, page 165).
384// *
385// * @param a, b a,b>0
386// * @param n 0<=n<=a+b
387// * @param rng the underlying random number generator
388// */
389// SIM_API int hypergeometric(cRNG *rng, int a, int b, int n);
390
406SIM_API int poisson(cRNG *rng, double lambda);
407
409
410} // namespace omnetpp
411
412
413#endif
414
int64_t-based, base-10 fixed-point simulation time.
Definition simtime.h:67
double dbl() const
Definition simtime.h:346
Abstract interface for random number generator classes.
Definition crng.h:49
virtual double doubleRand()=0
virtual uint32_t intRand()=0
SIM_API double student_t(cRNG *rng, unsigned int i)
Returns a random variate from the student-t distribution with i degrees of freedom....
SIM_API double exponential(cRNG *rng, double mean)
Returns a random variate from the exponential distribution with the given mean (that is,...
SIM_API double pareto_shifted(cRNG *rng, double a, double b, double c)
Returns a random variate from the shifted generalized Pareto distribution.
SIM_API double uniform(cRNG *rng, double a, double b)
Returns a random variate with uniform distribution in the range [a,b).
double lognormal(cRNG *rng, double m, double w)
Returns a random variate from the lognormal distribution with "scale" parameter m and "shape" paramet...
Definition distrib.h:251
SIM_API double truncnormal(cRNG *rng, double mean, double stddev)
Normal distribution truncated to nonnegative values.
SIM_API double erlang_k(cRNG *rng, unsigned int k, double mean)
Returns a random variate from the Erlang distribution with k phases and mean mean.
SIM_API double beta(cRNG *rng, double alpha1, double alpha2)
Returns a random variate from the beta distribution with parameters alpha1, alpha2.
SIM_API double gamma_d(cRNG *rng, double alpha, double theta)
Returns a random variate from the gamma distribution with parameters alpha>0, theta>0....
SIM_API double triang(cRNG *rng, double a, double b, double c)
Returns a random variate from the triangular distribution with parameters a <= b <= c.
SIM_API double weibull(cRNG *rng, double a, double b)
Returns a random variate from the Weibull distribution with parameters a, b > 0, where a is the "scal...
SIM_API double chi_square(cRNG *rng, unsigned int k)
Returns a random variate from the chi-square distribution with k degrees of freedom.
SIM_API double cauchy(cRNG *rng, double a, double b)
Returns a random variate from the Cauchy distribution (also called Lorentzian distribution) with para...
SIM_API double normal(cRNG *rng, double mean, double stddev)
Returns a random variate from the normal distribution with the given mean and standard deviation.
int bernoulli(cRNG *rng, double p)
Returns the result of a Bernoulli trial with probability p, that is, 1 with probability p and 0 with ...
Definition distrib.h:324
SIM_API int intuniform(cRNG *rng, int a, int b)
Returns a random integer with uniform distribution in the range [a,b], inclusive. (Note that the func...
SIM_API int binomial(cRNG *rng, int n, double p)
Returns a random integer from the binomial distribution with parameters n and p, that is,...
SIM_API int negbinomial(cRNG *rng, int n, double p)
Returns a random integer from the negative binomial distribution with parameters n and p,...
SIM_API int poisson(cRNG *rng, double lambda)
Returns a random integer from the Poisson distribution with parameter lambda, that is,...
SIM_API int intuniformexcl(cRNG *rng, int a, int b)
Returns a random integer with uniform distribution over [a,b), that is, from [a,b-1].
SIM_API int geometric(cRNG *rng, double p)
Returns a random integer from the geometric distribution with parameter p, that is,...
uint32_t intrand(cRNG *rng, uint32_t r)
Produces a random integer in the range [0,r) using the RNG given with its index.
Definition distrib.h:30
double dblrand(cRNG *rng)
Produces a random double in the range [0,1) using the RNG given with its index.
Definition distrib.h:35