# wichmann_hill¶

The wichmann_hill engine is the set of 273 Wichmann-Hill’s combined multiplicative congruential generators from NAG Numerical Libraries [NAG].

Description

The set of 372 different basic pseudorandom number generators wichmann_hill is the second basic generator in the NAG libraries.

Generation algorithm

$$x_n=a_{1, j} x_{n-1} (mod \ m_{1, j})$$

$$y_n = a_{2, j} y_{n-1} (mod \ m_{2, j})$$

$$z_n = a_{3, j} z_{n-1} (mod \ m_{3, j})$$

$$w_n = a_{4, j} w_{n-1} (mod \ m_{4, j})$$

$$u_n = (x_n / m_{1, j} + y_n / m_{2, j} + z_n / m_{3, j} + w_n / m_{4, j}) mod \ 1$$

The constants $$a_{i, j}$$ range from 112 to 127, the constants $$m_{i, j}$$ are prime numbers ranging from 16718909 to 16776917, close to $$2 ^ {24}$$.

## class wichmann_hill¶

Syntax

namespace oneapi::mkl::rng {
class wichmann_hill {
public:
static constexpr std::uint32_t default_seed = 1;

wichmann_hill(sycl::queue queue, std::uint32_t seed = default_seed);

wichmann_hill(sycl::queue queue, std::uint32_t seed, std::uint32_t engine_idx);

wichmann_hill(sycl::queue queue, std::initializer_list<std::uint32_t> seed);

wichmann_hill(sycl::queue queue, std::initializer_list<std::uint32_t> seed, std::uint32_t engine_idx);

wichmann_hill(const wichmann_hill& other);

wichmann_hill(wichmann_hill&& other);

wichmann_hill& operator=(const wichmann_hill& other);

wichmann_hill& operator=(wichmann_hill&& other);

~wichmann_hill();
};
}


Class Members

Routine

Description

wichmann_hill(sycl::queue queue, std::uint32_t seed = default_seed)

Constructor for common seed initialization of the engine (for this case multiple generators of the set would be used)

wichmann_hill(sycl::queue queue, std::uint32_t seed, std::uint32_t engine_idx)

Constructor for common seed initialization of the engine (for this case single generator of the set would be used)

wichmann_hill(sycl::queue& queue, std::initializer_list<std::uint32_t> seed)

Constructor for extended seed initialization of the engine (for this case multiple generators of the set would be used)

wichmann_hill(sycl::queue& queue, std::initializer_list<std::uint32_t> seed, std::uint32_t engine_idx)

Constructor for extended seed initialization of the engine (for this case single generator of the set would be used)

wichmann_hill(const wichmann_hill& other)

Copy constructor

wichmann_hill(wichmann_hill&& other)

Move constructor

wichmann_hill& operator=(const wichmann_hill& other)

Copy assignment operator

wichmann_hill& operator=(wichmann_hill&& other)

Move assignment operator

Constructors

wichmann_hill::wichmann_hill(sycl::queue queue, std::uint32_t seed = default_seed)


Input Parameters

queue

Valid sycl::queue object, calls of the oneapi::mkl::rng::generate() routine submits kernels in this queue to obtain random numbers from a given engine.

seed

The initial conditions of the generator state. Assume $$x_0=seed \ mod \ m_1, y_0 = z_0 = w_0 = 1$$. If $$x_0 = 0$$, assume $$x_0 = 1$$.

wichmann_hill::wichmann_hill(sycl::queue queue, std::uint32_t seed, std::uint32_t engine_idx)


Input Parameters

queue

Valid sycl::queue object, calls of the oneapi::mkl::rng::generate() routine submits kernels in this queue to obtain random numbers from a given engine.

seed

The initial conditions of the generator state. Assume $$x_0=seed \ mod \ m_1, y_0 = z_0 = w_0 = 1$$. If $$x_0 = 0$$, assume $$x_0 = 1$$.

engine_idx

The index of the set 1, …, 273.

Throws

oneapi::mkl::invalid_argument

Exception is thrown when $$idx > 273$$

wichmann_hill::wichmann_hill(sycl::queue& queue, std::initializer_list<std::uint32_t> seed)


Input Parameters

queue

Valid sycl::queue object, calls of the oneapi::mkl::rng::generate() routine submits kernels in this queue to obtain random numbers from a given engine.

seed

The initial conditions of the generator state, assume: if $$n = 0: x_{0} = y_{0} = z_{0} = w_{0} = 1$$

if $$n = 1: x_{0} = seed[0] \ mod \ m_1, y_{0} = z_{0} = w_{0} = 1$$. If $$x_0 = 0$$, assume $$x_0 = 1$$.

if $$n = 2: x_{0} = seed[0] \ mod \ m_1, y_{0} = seed[1] \ mod \ m_2, z_{0} = w_{0} = 1$$.

if $$n = 3: x_{0} = seed[0] \ mod \ m_1, y_{0} = seed[1] \ mod \ m_2, z_{0} = seed[2] \ mod \ m_3, w_{0} = 1$$.

if $$n \geqslant 4: x_{0} = seed[0] \ mod \ m_1, y_{0} = seed[1] \ mod \ m_2$$

$$z_{0} = seed[2] \ mod \ m_3, w_{0} = seed[3] \ mod \ m_4$$.

wichmann_hill::wichmann_hill(sycl::queue& queue, std::initializer_list<std::uint32_t> seed, std::uint32_t engine_idx)


Input Parameters

queue

Valid sycl::queue object, calls of the oneapi::mkl::rng::generate() routine submits kernels in this queue to obtain random numbers from a given engine.

seed

The initial conditions of the generator state, assume: if $$n = 0: x_{0} = y_{0} = z_{0} = w_{0} = 1$$

if $$n = 1: x_{0} = seed[0] \ mod \ m_1, y_{0} = z_{0} = w_{0} = 1$$. If $$x_0 = 0$$, assume $$x_0 = 1$$.

if $$n = 2: x_{0} = seed[0] \ mod \ m_1, y_{0} = seed[1] \ mod \ m_2, z_{0} = w_{0} = 1$$.

if $$n = 3: x_{0} = seed[0] \ mod \ m_1, y_{0} = seed[1] \ mod \ m_2, z_{0} = seed[2] \ mod \ m_3, w_{0} = 1$$.

if $$n \geqslant 4: x_{0} = seed[0] \ mod \ m_1, y_{0} = seed[1] \ mod \ m_2$$

$$z_{0} = seed[2] \ mod \ m_3, w_{0} = seed[3] \ mod \ m_4$$.

engine_idx

The index of the set 1, …, 273.

wichmann_hill::wichmann_hill(const wichmann_hill& other)


Input Parameters

other

Valid wichmann_hill object. The queue and state of the other engine is copied and applied to the current engine.

wichmann_hill::wichmann_hill(wichmann_hill&& other)


Input Parameters

other

Valid wichmann_hill object. The queue and state of the other engine is moved to the current engine.

wichmann_hill::wichmann_hill& operator=(const wichmann_hill& other)


Input Parameters

other

Valid wichmann_hill object. The queue and state of the other engine is copied and applied to the current engine.

wichmann_hill::wichmann_hill& operator=(wichmann_hill&& other)


Input Parameters

other

Valid wichmann_hill r-value object. The queue and state of the other engine is moved to the current engine.

Parent topic: Engines (Basic Random Number Generators)