WELLEngine

WELL(512a) Random Number Generator. See: http://www.iro.umontreal.ca/~panneton/WELLRNG.html

  1. alias WELLEngine(string name) = WELLEngine!(uint, name)
  2. struct WELLEngine(UIntType, string name)
    struct WELLEngine (
    UIntType
    string name
    ) if (
    name == "512a" ||
    name == "521a"
    ||
    name == "521b"
    ||
    name == "607a"
    ||
    name == "607b"
    ||
    name == "800a"
    ||
    name == "800b"
    ||
    name == "1024a"
    ||
    name == "1024b"
    ||
    name == "19937a"
    ||
    name == "19937b"
    ||
    name == "19937c"
    ||
    name == "21701a"
    ||
    name == "23209a"
    ||
    name == "23209b"
    ||
    name == "44497a"
    ||
    name == "44497b"
    ) {}

Constructors

this
this(uint value)

Members

Functions

popFront
void popFront()

range primitives

seed
void seed(uint value)

Manifest constants

Constant
enum Constant;
Undocumented in source.
isUniformRandom
enum isUniformRandom;

Mark as Random Number Generator

Properties

front
uint front [@property getter]
save
typeof(this) save [@property getter]

range primitives

Variables

MASKL
enum uint MASKL;
Undocumented in source.
MASKU
enum uint MASKU;
Undocumented in source.
MASKU
enum uint MASKU;
Undocumented in source.
_stateSize
enum size_t _stateSize;
Undocumented in source.
empty
enum bool empty;

range primitives

max
enum UIntType max;

maximum value

min
enum UIntType min;

minimum value

Examples

import std.algorithm;
import std.range;
import std.stdio;

WELLEngine!"512a" rng;

static assert(isUniformRNG!(typeof(rng)));
static assert(isSeedable!(typeof(rng)));

rng.seed(100);

assert(equal(rng.save.take(8),
  [ 2230636158,
    1842930638,
    155680193,
    1855495099,
    2311897807,
    3102313483,
    3970788677,
    3720522367,]));

// save test
auto saved1 = rng.save;
auto saved2 = rng.save;

rng.popFrontN(100);
assert(equal(saved1.save.take(64), saved2.save.take(64)));

saved1.popFrontN(100);
assert(equal(rng.save.take(64), saved1.save.take(64)));

assert(rng.front == 1947823519);
rng.popFront();
rng.popFrontN(10000);
assert(rng.front == 2831551372);

Meta