27 return (x ^ (x >> 27)) * UINT32_C(1664525);
37 return (x ^ (x >> 27)) * UINT32_C(1566083941);
45 if ((random->
status[0] & TINYMT32_MASK) == 0 &&
67 for (
unsigned int i = 1; i < MIN_LOOP; i++) {
68 random->
status[i & 3] ^= i + UINT32_C(1812433253)
69 * (random->
status[(i - 1) & 3]
70 ^ (random->
status[(i - 1) & 3] >> 30));
73 for (
unsigned int i = 0; i < PRE_LOOP; i++) {
87 const unsigned int lag = 1;
88 const unsigned int mid = 1;
89 const unsigned int size = 4;
93 uint32_t * st = &random->
status[0];
99 if (key_length + 1 > MIN_LOOP) {
100 count = (
unsigned int)key_length + 1;
107 r += (
unsigned int)key_length;
108 st[(mid + lag) %
size] += r;
111 for (i = 1, j = 0; (j <
count) && (j < (
unsigned int)key_length); j++) {
113 ^ st[(i + mid) %
size]
115 st[(i + mid) %
size] += r;
116 r += init_key[j] + i;
117 st[(i + mid + lag) %
size] += r;
121 for (; j <
count; j++) {
123 ^ st[(i + mid) %
size]
125 st[(i + mid) %
size] += r;
127 st[(i + mid + lag) %
size] += r;
131 for (j = 0; j <
size; j++) {
133 + st[(i + mid) %
size]
135 st[(i + mid) %
size] ^= r;
137 st[(i + mid + lag) %
size] ^= r;
142 for (i = 0; i < PRE_LOOP; i++) {
void tinymt32_init(tinymt32_t *random, uint32_t seed)
void tinymt32_init_by_array(tinymt32_t *random, uint32_t init_key[], int key_length)
static uint32_t ini_func2(uint32_t x)
static uint32_t ini_func1(uint32_t x)
static void period_certification(tinymt32_t *random)
Tiny Mersenne Twister only 127 bit internal state.
static void tinymt32_next_state(tinymt32_t *random)