117 double rand(
const double& n );
119 double randExc(
const double& n );
130 double randNorm(
const double& mean = 0.0,
const double& stddeviation = 0.0 );
152 #pragma warning( push ) // save current warning settings
153 #pragma warning( disable : 4146 ) // warning C4146: unary minus operator applied to unsigned type, result still unsigned
156 {
return m ^ (
mixBits(s0,s1)>>1) ^ (-
loBit(s1) & 0x9908b0dfU); }
158 #pragma warning( pop ) // return warning settings to what they were
169 {
seed(bigSeed,seedLength); }
175 {
return double(
randInt()) * (1.0/4294967295.0); }
178 {
return rand() * n; }
181 {
return double(
randInt()) * (1.0/4294967296.0); }
187 {
return (
double(
randInt()) + 0.5 ) * (1.0/4294967296.0); }
195 return ( a * 67108864.0 + b ) * (1.0/9007199254740992.0);
202 double r = sqrt( -2.0 * log( 1.0-
randDblExc()) ) * stddeviation;
203 double phi = 2.0 * 3.14159265358979323846264338328 *
randExc();
204 return mean + r * cos(phi);
218 s1 ^= (s1 << 7) & 0x9d2c5680U;
219 s1 ^= (s1 << 15) & 0xefc60000U;
220 return ( s1 ^ (s1 >> 18) );
262 register int k = (
N > seedLength ?
N : seedLength );
267 state[i] += ( bigSeed[j] & 0xffffffffU ) + j;
268 state[i] &= 0xffffffffU;
270 if( i >=
N ) { state[0] = state[
N-1]; i = 1; }
271 if( j >= seedLength ) j = 0;
273 for( k =
N - 1; k; --k )
278 state[i] &= 0xffffffffU;
280 if( i >=
N ) { state[0] = state[
N-1]; i = 1; }
282 state[0] = 0x80000000U;
293 FILE* urandom = fopen(
"/dev/urandom",
"rb" );
299 register bool success =
true;
300 while( success && i-- )
302 success = (fread( s++,
sizeof(
uint32_t), 1, urandom ) == 0);
304 if( success ) {
seed( bigSeed,
N );
return; }
308 seed(
hash( time(NULL), clock() ) );
321 *s++ = seed & 0xffffffffU;
324 *s++ = ( 1812433253U * ( *r ^ (*r >> 30) ) + i ) & 0xffffffffU;
336 for( i =
N -
M; i--; ++p )
337 *p =
twist( p[
M], p[0], p[1] );
338 for( i = M; --i; ++p )
339 *p =
twist( p[M-
N], p[0], p[1] );
355 unsigned char *p = (
unsigned char *) &t;
356 for(
size_t i = 0; i <
sizeof(t); ++i )
358 h1 *= UCHAR_MAX + 2U;
362 p = (
unsigned char *) &c;
363 for(
size_t j = 0; j <
sizeof(c); ++j )
365 h2 *= UCHAR_MAX + 2U;
368 return ( h1 + differ++ ) ^ h2;
377 for( ; i--; *sa++ = *s++ ) {}
387 for( ; i--; *s++ = *la++ ) {}
396 register int i = mtrand.
N;
397 for( ; i--; os << *s++ <<
"\t" ) {}
398 return os << mtrand.
left;
405 register int i = mtrand.
N;
406 for( ; i--; is >> *s++ ) {}
416 EXPORT
double SoarRand(
const double& max);
430 #endif // SOAR_RAND_H