[fpc-pascal] 32-bit random numbers

Peter peter at pblackman.plus.com
Fri Apr 21 18:31:32 CEST 2017


On 21/04/17 10:11, Mark Morgan Lloyd wrote:
> Am I correct in interpreting the documentation as implying that if I
> want to get a full-range 32-bit unsigned random number I have to use
> something like Random($100000000) ?
> 
> Internally, that gets a 64-bit random by calling genrand_MT19937 twice
> and throwing away one of the results. Not only does that waste time, but
> it also means that if I use a "well known" seed I only see every other
> value from the expected sequence e.g. http://oeis.org/A221557
> 

For a 32bit unsigned, I would be inclined to use random to a int64, and
mask out the upper bits.

You could also write an XORShift generator if you are prepared to forgo
the presence of zero in the sequence.


Peter.



More information about the fpc-pascal mailing list