FastRandom Class | GeneticSharp |
A fast random number generator for .NET
Colin Green, January 2005
September 4th 2005
Added NextBytesUnsafe() - commented out by default.
Fixed bug in Reinitialise() - y,z and w variables were not being reset.
Key points:
1) Based on a simple and fast xor-shift pseudo random number generator (RNG) specified in:
Marsaglia, George. (2003). Xorshift RNGs.
http://www.jstatsoft.org/v08/i14/xorshift.pdf
This particular implementation of xorshift has a period of 2^128-1. See the above paper to see
how this can be easily extened if you need a longer period. At the time of writing I could find no
information on the period of System.Random for comparison.
2) Faster than System.Random. Up to 8x faster, depending on which methods are called.
3) Direct replacement for System.Random. This class implements all of the methods that System.Random
does plus some additional methods. The like named methods are functionally equivalent.
4) Allows fast re-initialisation with a seed, unlike System.Random which accepts a seed at construction
time which then executes a relatively expensive initialisation routine. This provides a vast speed improvement
if you need to reset the pseudo-random number sequence many times, e.g. if you want to re-generate the same
sequence many times. An alternative might be to cache random numbers in an array, but that approach is limited
by memory capacity and the fact that you may also want a large number of different sequences cached. Each sequence
can each be represented by a single seed value (int) when using FastRandom.
Notes.
A further performance improvement can be obtained by declaring local variables as static, thus avoiding
re-allocation of variables on each call. However care should be taken if multiple instances of
FastRandom are in use or if being used in a multi-threaded environment.
Inheritance Hierarchy
Namespace: SharpNeatLib.Maths
Assembly: GeneticSharp.Domain (in GeneticSharp.Domain.dll) Version: 1.0.5010.36434
Syntax
See Also