diff options
Diffstat (limited to 'source/kit/mersenne_twister_64.c')
-rw-r--r-- | source/kit/mersenne_twister_64.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/source/kit/mersenne_twister_64.c b/source/kit/mersenne_twister_64.c index 9bf238f..4032dc9 100644 --- a/source/kit/mersenne_twister_64.c +++ b/source/kit/mersenne_twister_64.c @@ -5,9 +5,9 @@ #define UM 0xffffffff80000000ull #define LM 0x7fffffffull -void kit_mt64_init_array(kit_mt64_state_t *state, ptrdiff_t size, - uint64_t *seed) { - ptrdiff_t i; +void kit_mt64_init_array(kit_mt64_state_t *state, i64 size, + u64 *seed) { + i64 i; for (i = 0; i < size && i < KIT_MT64_N; i++) state->mt[i] = seed[i]; for (state->index = size; state->index < KIT_MT64_N; state->index++) state->mt[state->index] = (6364136223846793005ull * @@ -17,40 +17,40 @@ void kit_mt64_init_array(kit_mt64_state_t *state, ptrdiff_t size, state->index); } -void kit_mt64_init(kit_mt64_state_t *state, uint64_t seed) { +void kit_mt64_init(kit_mt64_state_t *state, u64 seed) { kit_mt64_init_array(state, 1, &seed); } void kit_mt64_rotate(kit_mt64_state_t *state) { - static uint64_t mag01[2] = { 0ull, MATRIX_A }; + static u64 mag01[2] = { 0ull, MATRIX_A }; - uint64_t x; - int i; + u64 x; + i32 i; for (i = 0; i < KIT_MT64_N - MM; i++) { x = (state->mt[i] & UM) | (state->mt[i + 1] & LM); state->mt[i] = state->mt[i + MM] ^ (x >> 1u) ^ - mag01[(int) (x & 1ull)]; + mag01[(i32) (x & 1ull)]; } for (; i < KIT_MT64_N - 1; i++) { x = (state->mt[i] & UM) | (state->mt[i + 1] & LM); state->mt[i] = state->mt[i + (MM - KIT_MT64_N)] ^ (x >> 1u) ^ - mag01[(int) (x & 1ull)]; + mag01[(i32) (x & 1ull)]; } x = (state->mt[KIT_MT64_N - 1] & UM) | (state->mt[0] & LM); state->mt[KIT_MT64_N - 1] = state->mt[MM - 1] ^ (x >> 1u) ^ - mag01[(int) (x & 1ull)]; + mag01[(i32) (x & 1ull)]; state->index = 0; } -uint64_t kit_mt64_generate(kit_mt64_state_t *state) { +u64 kit_mt64_generate(kit_mt64_state_t *state) { if (state->index >= KIT_MT64_N) kit_mt64_rotate(state); - uint64_t x = state->mt[state->index++]; + u64 x = state->mt[state->index++]; x ^= (x >> 29u) & 0x5555555555555555ull; x ^= (x << 17u) & 0x71d67fffeda60000ull; @@ -59,3 +59,8 @@ uint64_t kit_mt64_generate(kit_mt64_state_t *state) { return x; } + +#undef MM +#undef MATRIX_A +#undef UM +#undef LM |