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 80 of file RandomNumbers.cpp.

80 {
81 double r = 2, v1, v2, l, result;
82 while (r >= 1.0 || r < 1e-300) {
83 v1 = 2.0 * randomDouble() - 1.0;
84 v2 = 2.0 * randomDouble() - 1.0;
85 r = v1 * v1 + v2 * v2;
86 }
87 l = v1 * sqrt(-2.0 * ::log(r) / r);
88 result = avg + std * l;
89 return (result);
90}
double randomDouble()

◆ random()

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

Definition at line 16 of file RandomNumbers.cpp.

16 {
17 static long seed = -1;
18 if (newSeed) {
19 seed = -newSeed;
20 }
21 int j;
22 long k;
23 static long seed2 = 123456789;
24 static long iy = 0;
25 static long iv[NTAB];
26 double temp;
27 if (seed <= 0) {
28 if (-(seed) < 1)
29 seed = 3;
30 else
31 seed = -(seed);
32 seed2 = (seed);
33 for (j = NTAB + 7; j >= 0; j--) {
34 k = (seed) / IQ1;
35 seed = IA1 * (seed - k * IQ1) - k * IR1;
36 if (seed < 0)
37 seed += IM1;
38 if (j < NTAB)
39 iv[j] = seed;
40 }
41 iy = iv[0];
42 }
43 k = (seed) / IQ1;
44 seed = IA1 * (seed - k * IQ1) - k * IR1;
45 if (seed < 0)
46 seed += IM1;
47 k = seed2 / IQ2;
48 seed2 = IA2 * (seed2 - k * IQ2) - k * IR2;
49 if (seed2 < 0)
50 seed2 += IM2;
51 j = int(iy / NDIV);
52 iy = iv[j] - seed2;
53 iv[j] = seed;
54 if (iy < 1)
55 iy += IMM1;
56 if ((temp = double(AM * iy)) > RNMX)
57 return RNMX;
58 else
59 return temp;
60}
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 62 of file RandomNumbers.cpp.

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

◆ randomDouble() [2/4]

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

Definition at line 74 of file RandomNumbers.cpp.

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

◆ randomDouble() [3/4]

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

Definition at line 64 of file RandomNumbers.cpp.

64 {
65 double dmax = double(max);
66 return (dmax * randomDouble());
67}

◆ randomDouble() [4/4]

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

Definition at line 69 of file RandomNumbers.cpp.

69 {
70 double dmax = double(max);
71 return (dmax * randomDouble());
72}

◆ randomInt()

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

Definition at line 76 of file RandomNumbers.cpp.

76 {
77 return lround((upper - lower) * randomDouble() + lower);
78}