Loading...
Searching...
No Matches
eonc::rng Namespace Reference

Functions

double random (long newSeed=0)
double randomDouble ()
double randomDouble (int max)
double randomDouble (long max)
double randomDouble (double max)
long randomInt (int lower, int upper)
double gaussRandom (double avg, double std)

Function Documentation

◆ gaussRandom()

double eonc::rng::gaussRandom ( double avg,
double std )

Definition at line 90 of file RandomNumbers.cpp.

90 {
91 double r = 2, v1, v2, l, result;
92 while (r >= 1.0 || r < 1e-300) {
93 v1 = 2.0 * randomDouble() - 1.0;
94 v2 = 2.0 * randomDouble() - 1.0;
95 r = v1 * v1 + v2 * v2;
96 }
97 l = v1 * sqrt(-2.0 * ::log(r) / r);
98 result = avg + std * l;
99 return (result);
100}
double randomDouble()

◆ random()

double eonc::rng::random ( long newSeed = 0)

Definition at line 29 of file RandomNumbers.cpp.

29 {
30 auto &st = tls;
31 if (newSeed) {
32 st.seed = -newSeed;
33 }
34 int j;
35 long k;
36 double temp;
37 if (st.seed <= 0) {
38 if (-(st.seed) < 1)
39 st.seed = 3;
40 else
41 st.seed = -(st.seed);
42 st.seed2 = (st.seed);
43 for (j = NTAB + 7; j >= 0; j--) {
44 k = (st.seed) / IQ1;
45 st.seed = IA1 * (st.seed - k * IQ1) - k * IR1;
46 if (st.seed < 0)
47 st.seed += IM1;
48 if (j < NTAB)
49 st.iv[j] = st.seed;
50 }
51 st.iy = st.iv[0];
52 }
53 k = (st.seed) / IQ1;
54 st.seed = IA1 * (st.seed - k * IQ1) - k * IR1;
55 if (st.seed < 0)
56 st.seed += IM1;
57 k = st.seed2 / IQ2;
58 st.seed2 = IA2 * (st.seed2 - k * IQ2) - k * IR2;
59 if (st.seed2 < 0)
60 st.seed2 += IM2;
61 j = int(st.iy / NDIV);
62 st.iy = st.iv[j] - st.seed2;
63 st.iv[j] = st.seed;
64 if (st.iy < 1)
65 st.iy += IMM1;
66 if ((temp = double(AM * st.iy)) > RNMX)
67 return RNMX;
68 else
69 return temp;
70}
constexpr double AM
constexpr int NDIV
constexpr long IA2
constexpr long IR2
constexpr long IQ1
constexpr int NTAB
constexpr long IA1
constexpr long IQ2
constexpr long IM1
constexpr long IMM1
constexpr long IM2
constexpr long IR1
constexpr double RNMX

◆ randomDouble() [1/4]

double eonc::rng::randomDouble ( )

Definition at line 72 of file RandomNumbers.cpp.

72{ return (random()); }
double random(long newSeed=0)

◆ randomDouble() [2/4]

double eonc::rng::randomDouble ( double max)

Definition at line 84 of file RandomNumbers.cpp.

84{ return (dmax * randomDouble()); }

◆ randomDouble() [3/4]

double eonc::rng::randomDouble ( int max)

Definition at line 74 of file RandomNumbers.cpp.

74 {
75 double dmax = double(max);
76 return (dmax * randomDouble());
77}

◆ randomDouble() [4/4]

double eonc::rng::randomDouble ( long max)

Definition at line 79 of file RandomNumbers.cpp.

79 {
80 double dmax = double(max);
81 return (dmax * randomDouble());
82}

◆ randomInt()

long eonc::rng::randomInt ( int lower,
int upper )

Definition at line 86 of file RandomNumbers.cpp.

86 {
87 return lround((upper - lower) * randomDouble() + lower);
88}