Reputation: 83
I trying to implement cross-platform consistent random number generation with a 32-bit seed. Most post point me to Mersenne Twister or writing my own implementation.
In the source code there is a function called void init_by_array().
Is the only purpose of this function to extend the seed passed 32-bit?
From the ReadMe
init_by_array(init_key, key_length) initializes the state vector by using an array init_key[] of unsigned 32-bit integers of length key_kength. If key_length is smaller than 624, then each array of 32-bit integers gives distinct initial state vector. This is useful if you want a larger seed space than 32-bit word.
Failing to understand this just assuming based on the last sentence.
The code seems to run fine only using init_genrand() and seems to be producing consistent results.
Upvotes: 2
Views: 341
Reputation: 19853
Mersenne Twister has 19937 bits of state space that it uses to iterate through the sequence of values it produces. If you initialize it with a 32 bit integer, you are restricting it to just 232 out of the 219937 possible starting points, and there are a massive number of sample trajectories that you will never see. The init_by_array()
function allows you to specify more bits for the initial state, giving the potential to achieve any of the sampling trajectories which MT is capable of generating.
Upvotes: 3