This project was created with the intention of building an alternative to System.Random
for games, procedural generation etc. As the name suggests, it uses a Lehmer random number generator.
It uses .NET Standard.
Lehmer.Random
is a pseudo-random number generator and is not cryptographically secure.
The algorithm used in Lehmer.Random
is Javidx9's implementation of the Lehmer random number generator converted from C++ to C#. Javidx9 has an excellent video explaining some of the shortcomings of other RNGs for use in procedural generation, and also demonstrates the use of the Lehmer RNG to generate a universe.
Lehmer.Random
is intended to be easy to use and mirrors the functionality of System.Random
.
Some additional method signatures have been added to improve the usability of the RNG. For example, NextDouble()
has two additional signatures that allow a range to be passed.
This list contains all of the non-static methods of Lehmer.Random
:
• Random ()
Initializes a new instance of the Random class, using a time-dependent default seed value.
• Random (int seed)
Initializes a new instance of the Random class, using the specified seed value.
• Random (uint seed)
Initializes a new instance of the Random class, using the specified seed value.
• int Next ()
Returns a non-negative random integer.
• int Next (int maxValue)
Returns a non-negative random integer that is less than the specified maximum.
• int Next (int minValue, int maxValue)
Returns a random integer that is within a specified range.
• double NextDouble ()
Returns a random floating-point number that is greater than or equal to 0.0, and less than 1.0.
• double NextDouble (double maxValue)
Returns a non-negative random floating-point number that is less than the specified maximum.
• double NextDouble (double minValue, double maxValue)
Returns a random floating-point number that is within a specified range.
• void NextBytes (byte[] buffer)
Fills the elements of a specified array of bytes with random numbers.
Lehmer.Random
also contains several static methods that can be used without instantiating the class. These can be used to generate "one-off" random numbers that are independent of the number generated previously.
• static int RndInt (uint seed, int minValue, int maxValue)
Returns a random integer that is within a specified range, using the specified seed value.
• static int RndInt (int minValue, int maxValue)
Returns a random integer that is within a specified range, using a time-dependent default seed value.
• static double RndDouble (uint seed, double minValue, double maxValue)
Returns a random double that is within a specified range, using the specified seed value.
• static double RndDouble (double minValue, double maxValue)
Returns a random double that is within a specified range, using a time-dependent default seed value.