39 #define SOPLEX_DEFAULT_LIN UINT32_C(123456789) 40 #define SOPLEX_DEFAULT_XOR UINT32_C(362436000) 41 #define SOPLEX_DEFAULT_MWC UINT32_C(521288629) 42 #define SOPLEX_DEFAULT_CST UINT32_C(7654321) 45 #define SOPLEX_RSTEP UINT64_C(1103515245) 46 #define SOPLEX_RADD UINT64_C(12345) 91 xor_seed ^= (xor_seed << 13);
92 xor_seed ^= (xor_seed >> 17);
93 xor_seed ^= (xor_seed << 5);
96 t = UINT64_C(698769069) * mwc_seed +
cst_seed;
97 cst_seed = (uint32_t)(t >> 32);
98 mwc_seed = (uint32_t) t;
100 return (lin_seed + xor_seed + mwc_seed) / (
Real)UINT32_MAX;
118 return minimum * (1.0 - randnumber) + maximum * randnumber;
135 seedshift = initshift;
143 assert(lin_seed > 0);
144 assert(xor_seed > 0);
145 assert(mwc_seed > 0);
#define SOPLEX_DEFAULT_LIN
#define SOPLEX_DEFAULT_MWC
Random numbers.Class Random provides random Real variables, i.e. a value variable that gives another ...
uint32_t seedshift
initial shift for random seeds.
Real next(Real minimum=0.0, Real maximum=1.0)
returns next random number.
Random(uint32_t randomseed=0)
default constructor.
uint32_t cst_seed
random seed shifted for mwc_seed.
#define SOPLEX_DEFAULT_CST
Real next_random()
executes KISS random number generator and returns a pseudo random Real value in [0,1].
#define SOPLEX_DEFAULT_XOR
Everything should be within this namespace.
uint32_t getSeed() const
returns the initial seed shift
void setSeed(uint32_t initshift)
initialize all seeds of the random number generator.
uint32_t lin_seed
random seed for linear congruential RNS.
uint32_t xor_seed
random seed for XOR-shift RNS.
uint32_t mwc_seed
random seed Multiple-with-carry RNS.