The ANL library includes a number of random number generators based on generators designed by George Marsaglia. The generators are:
LCG: Simple Linear Congruential Generator
Xorshift: Xor Shift generator
KISS: Keep It Simple, Stupid
MWC256: Multiply-with-carry 256
CMWC4096: Complementary-multiply-with-carry 4096
All of the random generators share a common interface:
class CBasePRNG
{
public:
virtual unsigned int get();
virtual void setSeed(unsigned int s);
void setSeedTime();
unsigned int getTarget(unsigned int t);
unsigned int getRange(unsigned int low, unsigned int high);
double get01();
};
get(): Obtains a value in the range of (0,MAX_UNSIGNED_INT).
getTarget(): Obtains a value in the range of (0,target).
getRange(): Obtains a value in the range of (low,high).
get01(): Obtains a value in the range of (0,1).
setSeed(): Seeds the RNG.
setSeedTime(): Seeds the RNG from the system time.
#include#include "anl.h" int main() { anl.CMWC4096 rng; rng.setSeed(1234); std::cout << rng.get() << std::endl; std::cout << rng.getTarget(1000) << std::endl; std::cout << rng.getRange(1,6) << std::endl; std::cout << rng.get01() << std::endl; return 1; } Expected output: 1394590422 614 6 0.66388264919256
Random generators are used at various places throughout the noise library, to seed various values and transformations.