ac94fe15创建于 2025年9月11日历史提交
#pragma once
#include <math.h>
#include <stdint.h>

// #ifdef _WIN32
// #define inline __forceinline
// #endif

#define RK_STATE_LEN 624

#define N 624
#define M 397
#define MATRIX_A 0x9908b0dfUL
#define UPPER_MASK 0x80000000UL
#define LOWER_MASK 0x7fffffffUL

typedef struct s_mt19937_state {
  uint32_t key[RK_STATE_LEN];
  int pos;
} mt19937_state;

extern void mt19937_seed(mt19937_state *state, uint32_t seed);

extern void mt19937_gen(mt19937_state *state);

uint32_t mt19937_next(mt19937_state *state);

extern void mt19937_init_by_array(mt19937_state *state, uint32_t *init_key,
                                  int key_length);
                 
uint64_t mt19937_next64(mt19937_state *state);

uint32_t mt19937_next32(mt19937_state *state);

double mt19937_next_double(mt19937_state *state);

void mt19937_jump(mt19937_state *state);