22#define TINYMT32_MEXP 127
24#define TINYMT32_SH1 10
26#define TINYMT32_MASK UINT32_C(0x7fffffff)
27#define TINYMT32_MUL (1.0f / 16777216.0f)
29#if defined(__cplusplus)
75 x = (random->
status[0] & TINYMT32_MASK)
78 x ^= (x << TINYMT32_SH0);
79 y ^= (y >> TINYMT32_SH0) ^ x;
82 random->
status[2] = x ^ (y << TINYMT32_SH1);
84 int32_t
const a = -((int32_t)(y & 1)) & (int32_t)random->
mat1;
85 int32_t
const b = -((int32_t)(y & 1)) & (int32_t)random->
mat2;
86 random->
status[1] ^= (uint32_t)a;
87 random->
status[2] ^= (uint32_t)b;
99#if defined(LINEARITY_CHECK)
101 ^ (random->
status[2] >> TINYMT32_SH8);
104 + (random->
status[2] >> TINYMT32_SH8);
127#if defined(LINEARITY_CHECK)
129 ^ (random->
status[2] >> TINYMT32_SH8);
132 + (random->
status[2] >> TINYMT32_SH8);
136 conv.u = ((t0 ^ random->
tmat) >> 9) | UINT32_C(0x3f800000);
138 conv.u = (t0 >> 9) | UINT32_C(0x3f800000);
157#if defined(LINEARITY_CHECK)
159 ^ (random->
status[2] >> TINYMT32_SH8);
162 + (random->
status[2] >> TINYMT32_SH8);
166 conv.u = ((t0 ^ random->
tmat) >> 9) | UINT32_C(0x3f800001);
168 conv.u = (t0 >> 9) | UINT32_C(0x3f800001);
253#if defined(__cplusplus)
typedef __attribute__
Ignition Mode.
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 tinymt32_temper(tinymt32_t *random)
static double tinymt32_generate_32double(tinymt32_t *random)
static int tinymt32_get_mexp(tinymt32_t *random __attribute__((unused)))
static float tinymt32_generate_float01(tinymt32_t *random)
static float tinymt32_temper_conv_open(tinymt32_t *random)
static void tinymt32_next_state(tinymt32_t *random)
static uint32_t tinymt32_generate_uint32(tinymt32_t *random)
static float tinymt32_generate_float12(tinymt32_t *random)
static float tinymt32_generate_floatOO(tinymt32_t *random)
static float tinymt32_generate_floatOC(tinymt32_t *random)
static float tinymt32_generate_float(tinymt32_t *random)
static float tinymt32_temper_conv(tinymt32_t *random)