Mersenne Twister#
The Mersenne Twister [[1]] is a random number generator producing uniform pseudorandom numbers. The implementation is based on the following resources:
In addition to the implemented Mersenne Twister, there exist multiple improvements including a SIMD-oriented Fast Mersenne Twister (SFMT) [[2]]. However, the implementation relies on recursion, which is not allowed within the UltraZohm project and not implemented.
Warning
Using the Mersenne Twister for real-time applications, especially in interrupts, is not recommended (see Pseudorandom number generator (PRNG)).
MT19937 distribution#
The following figures shows the generation of 5000 random numbers using the Mersenne Twister. Additionally, the Histogram of the generated values is shown. The generated random values are uniformly distributed, but not in a perfect manner. The specific pattern and distribution depends on the random seed.
(Source code, png, hires.png, pdf)
Fig. 339 Distribution generated using the Mersenne Twister PRNG using seed 0.#
Reference#
-
typedef struct uz_prng_mtwister_t uz_prng_mtwister_t#
Object of Mersenne Twister generator.
-
uz_prng_mtwister_t *uz_prng_mtwister_init(uint32_t random_seed)#
Initializes the Mersenne Twister random number generator for a given random seed.
- Parameters:
random_seed – Random seed of the generator. Output is deterministic and reproducible for each given seed.
- Returns:
uz_prng_mtwister_t*
-
uint32_t uz_prng_mtwister_get_uniform_uint32(uz_prng_mtwister_t *self)#
Returns a uniformly distributed unsigned integer within 0…UINT32_MAX (i.e., 2^32-1=4,294,967,295)
- Parameters:
self
- Returns:
uint32_t
-
void uz_prng_mtwister_reset(uz_prng_mtwister_t *self, uint32_t random_seed)#
Resets the internal state of the generator to random_seed.
- Parameters:
self
random_seed