14#define MATRIX_A 0x9908b0df
15#define UPPER_MASK 0x80000000
16#define LOWER_MASK 0x7fffffff
19#define TEMPERING_MASK_B 0x9d2c5680
20#define TEMPERING_MASK_C 0xefc60000
21#define TEMPERING_SHIFT_U(y) (y >> 11)
22#define TEMPERING_SHIFT_S(y) (y << 7)
23#define TEMPERING_SHIFT_T(y) (y << 15)
24#define TEMPERING_SHIFT_L(y) (y >> 18)
26static unsigned int mt[
N][2];
27static int mti[2] = {
N + 1,
N + 1 };
54 seed = (
unsigned int)clock();
56 mt[0][seq] =
seed & 0xffffffff;
57 for (mti[seq] = 1; mti[seq] <
N; mti[seq]++)
58 mt[mti[seq]][seq] = (69069 * mt[mti[seq] - 1][seq]) & 0xffffffff;
64 static unsigned int mag01[2]={0x0,
MATRIX_A};
74 for (kk = 0; kk <
N -
M; kk++) {
76 mt[kk][seq] = mt[kk +
M][seq] ^ (y >> 1) ^ mag01[y & 0x1];
78 for (; kk <
N - 1; kk++) {
80 mt[kk][seq] = mt[kk + (
M -
N)][seq] ^ (y >> 1) ^ mag01[y & 0x1];
83 mt[
N-1][seq] = mt[
M-1][seq] ^ (y >> 1) ^ mag01[y & 0x1];
88 y = mt[mti[seq]++][seq];
102#undef TEMPERING_MASK_B
103#undef TEMPERING_MASK_C
104#undef TEMPERING_SHIFT_U
105#undef TEMPERING_SHIFT_S
106#undef TEMPERING_SHIFT_T
107#undef TEMPERING_SHIFT_L
@ seed
Semente aleatória para inicializar a sequência de números pseudo-aleatórios.
#define TEMPERING_SHIFT_T(y)
#define TEMPERING_SHIFT_L(y)
#define TEMPERING_SHIFT_U(y)
#define TEMPERING_SHIFT_S(y)
static unsigned int rand(int seq=0)
static void srand(unsigned int seed, int seq=0)