5#define REGISTER register
155#define __STDC_LIMIT_MACROS
163#define MT_STATE_SIZE 624
292extern uint64_t mts_llrand(
mt_state* state);
304extern uint64_t mt_llrand(
void);
322#define MT_TEMPERING_MASK_B 0x9d2c5680
323#define MT_TEMPERING_MASK_C 0xefc60000
324#define MT_TEMPERING_SHIFT_U(y) \
326#define MT_TEMPERING_SHIFT_S(y) \
328#define MT_TEMPERING_SHIFT_T(y) \
330#define MT_TEMPERING_SHIFT_L(y) \
340#define MT_PRE_TEMPER(value) \
343 value ^= MT_TEMPERING_SHIFT_U(value); \
344 value ^= MT_TEMPERING_SHIFT_S(value) & MT_TEMPERING_MASK_B; \
345 value ^= MT_TEMPERING_SHIFT_T(value) & MT_TEMPERING_MASK_C; \
348#define MT_FINAL_TEMPER(value) \
349 ((value) ^ MT_TEMPERING_SHIFT_L(value))
350#define MT_TEMPER(value) \
353 value ^= MT_TEMPERING_SHIFT_U(value); \
354 value ^= MT_TEMPERING_SHIFT_S(value) & MT_TEMPERING_MASK_B; \
355 value ^= MT_TEMPERING_SHIFT_T(value) & MT_TEMPERING_MASK_C; \
356 value ^= MT_TEMPERING_SHIFT_L(value); \
384#define MT_EXTERN extern
394#define MT_INLINE inline
403#ifndef MT_GENERATE_CODE_IN_HEADER
405#define MT_GENERATE_CODE_IN_HEADER 1
407#if defined(__INTEL_COMPILER) || defined(_MSC_VER)
408#define MT_GENERATE_CODE_IN_HEADER 0
412#if MT_GENERATE_CODE_IN_HEADER
426 if (state->stateptr <= 0)
429 random_value = state->statevec[--state->stateptr];
461 if (--state->stateptr <= 0)
463 if (state->stateptr < 0)
466 random_value_1 = state->statevec[--state->stateptr];
470 random_value_1 = state->statevec[state->stateptr];
475 random_value_1 = state->statevec[state->stateptr];
479 random_value_2 = state->statevec[--state->stateptr];
482 return ((uint64_t) random_value_1 << 32)
497 if (state->stateptr <= 0)
500 random_value = state->statevec[--state->stateptr];
515 uint64_t final_value;
525 if (--state->stateptr <= 0)
527 if (state->stateptr < 0)
530 random_value_1 = state->statevec[--state->stateptr];
534 random_value_1 = state->statevec[state->stateptr];
539 random_value_1 = state->statevec[state->stateptr];
543 random_value_2 = state->statevec[--state->stateptr];
547 final_value = ((uint64_t) random_value_1 << 32) | (uint64_t) random_value_2;
613 return ((uint64_t) random_value_1 << 32)
644 uint64_t final_value;
678 final_value = ((uint64_t) random_value_1 << 32) | (uint64_t) random_value_2;
695 friend class mt_empirical_distribution;
706 bool pickSeed =
false)
711 state.initialized = 0;
715 mt_prng(uint32_t newseed)
719 state.initialized = 0;
726 state.initialized = 0;
738 void seed32(uint32_t newseed)
743 void seed32new(uint32_t newseed)
766 operator<<(std::ostream& stream,
const mt_prng& rng);
768 operator>>(std::istream& stream, mt_prng& rng);
780 return mts_llrand(&state);
813#if MT_GENERATE_CODE_IN_HEADER
818 std::ostream& stream,
823 if (!(stream << rng.state.statevec[i] <<
' '))
827 return stream << rng.state.stateptr;
834 std::istream& stream,
837 rng.state.initialized = rng.state.stateptr = 0;
840 if (!(stream >> rng.state.statevec[i]))
844 if (!(stream >> rng.state.stateptr))
846 rng.state.stateptr = 0;
853 if (rng.state.stateptr < 0 || rng.state.stateptr >
MT_STATE_SIZE)
855 rng.state.stateptr = 0;
double mt_64_to_double
Definition mtwist.c:312
void mts_bestseed(mt_state *state)
Definition mtwist.c:600
void mts_seedfull(mt_state *state, uint32_t seeds[MT_STATE_SIZE])
Definition mtwist.c:459
mt_state mt_default_state
Definition mtwist.c:299
#define MT_EXTERN
Definition mtwist.c:202
double mt_32_to_double
Definition mtwist.c:310
void mts_seed32new(mt_state *state, uint32_t seed)
Definition mtwist.c:408
void mts_seed32(mt_state *state, uint32_t seed)
Definition mtwist.c:372
uint32_t mts_goodseed(mt_state *state)
Definition mtwist.c:509
uint32_t mts_seed(mt_state *state)
Definition mtwist.c:497
#define MT_INLINE
Definition mtwist.c:201
#define MT_PRE_TEMPER(value)
Definition mtwist.h:340
void mt_seed32new(uint32_t seed)
Definition mtwist.c:890
void mts_bestseed(mt_state *state)
Definition mtwist.c:600
int mts_loadstate(FILE *statefile, mt_state *state)
Definition mtwist.c:839
void mts_seedfull(mt_state *state, uint32_t seeds[MT_STATE_SIZE])
Definition mtwist.c:459
#define MT_FINAL_TEMPER(value)
Definition mtwist.h:348
mt_state * mt_getstate(void)
Definition mtwist.c:937
uint32_t mts_lrand(mt_state *state)
void mt_seed32(uint32_t seed)
Definition mtwist.c:879
#define MT_STATE_SIZE
Definition mtwist.h:163
void mts_refresh(mt_state *state)
#define MT_TEMPER(value)
Definition mtwist.h:350
double mts_drand(mt_state *state)
int mt_savestate(FILE *statefile)
Definition mtwist.c:946
int mts_savestate(FILE *statefile, mt_state *state)
Definition mtwist.c:804
int mt_loadstate(FILE *statefile)
Definition mtwist.c:955
void mts_seed32new(mt_state *state, uint32_t seed)
Definition mtwist.c:408
#define REGISTER
Definition mtwist.h:5
void mt_bestseed(void)
Definition mtwist.c:926
void mts_mark_initialized(mt_state *state)
Definition mtwist.c:335
void mts_seed32(mt_state *state, uint32_t seed)
Definition mtwist.c:372
void mt_seedfull(uint32_t seeds[MT_STATE_SIZE])
Definition mtwist.c:901
uint32_t mt_seed(void)
Definition mtwist.c:910
uint32_t mt_goodseed(void)
Definition mtwist.c:918
double mts_ldrand(mt_state *state)
uint32_t mts_goodseed(mt_state *state)
Definition mtwist.c:509
uint32_t mts_seed(mt_state *state)
Definition mtwist.c:497
uint32_t statevec[MT_STATE_SIZE]
Definition mtwist.h:183
int initialized
Definition mtwist.h:186
int stateptr
Definition mtwist.h:185