summaryrefslogtreecommitdiff
path: root/source/kit/mersenne_twister_64.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/kit/mersenne_twister_64.c')
-rw-r--r--source/kit/mersenne_twister_64.c29
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