A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://en.cppreference.com/w/cpp/language/../numeric/random/philox_engine.html below:

std::philox_engine - cppreference.com

std::philox_engine is a counter-based random number engine.

[edit] Template parameters UIntType - The result type generated by the generator. The effect is undefined if this is not one of unsigned short, unsigned int, unsigned long, or unsigned long long. w - the word size in bits n - the word count r - the round count consts - the sequence of multipliers and round constants used for generating random numbers

If any of the following values is not true, the program is ill-formed:

[edit] Generator properties

In the following description, let \(\scriptsize Q_i \)Qi denote the ith element of sequence Q, where the subscript starts from zero.

The size of the states of philox_engine is \(\scriptsize O(n)\)O(n), each of them consists of four parts:

The transition algorithm of philox_engine (\(\scriptsize TA(X_i) \)TA(Xi)) is defined as follows:

  1. Generates a new sequence of n random values (see below) and stores them in Y.
  2. Increments the counter Z by 1.
  3. Resets j to ​0​.

The generation algorithm of philox_engine is \(\scriptsize GA(X_i)=Y_j \)GA(Xi)=Yj.

  1. ↑ In this case, the next generation algorithm call returns the next generated value in the buffer.
  2. ↑ In this case, the buffer is refreshed, and the next generation algorithm call returns the first value in the new buffer.
[edit] Generating random values

Random values are generated from the following parameters:

The sequences M and C are formed from the values from template parameter pack consts, which represents the \(\scriptsize M_k \)Mk and \(\scriptsize C_k \)Ck constants as [\(\scriptsize M_0 \)M0, \(\scriptsize C_0 \)C0, \(\scriptsize M_1 \)M1, \(\scriptsize C_1 \)C1,... , ..., \(\scriptsize M_{n/2-1} \)Mn/2-1, \(\scriptsize C_{n/2-1} \)Cn/2-1].

Random numbers are generated by the following process:

  1. Initializes the output sequence S with the elements of X.
  2. Updates the elements of S for r rounds.
  3. Replaces the values in the buffer Y with the values in S.
[edit] Updating the output sequence

For each round of update, an intermediate sequence V is initialized with the elements of S in a specified order:

 n   \(\scriptsize V_{0} \)V0   \(\scriptsize V_{1} \)V1   \(\scriptsize V_{2} \)V2   \(\scriptsize V_{3} \)V3  2 \(\scriptsize S_0 \)S0 \(\scriptsize S_1 \)S1 N/A 4 \(\scriptsize S_2 \)S2 \(\scriptsize S_1 \)S1 \(\scriptsize S_0 \)S0 \(\scriptsize S_3 \)S3

Given the following operation notations:

Let q be the current round number (starting from zero), for each integer k in [​0​n / 2), the elements of the output sequence S are updated as follows:

[edit] Predefined specializations

The following specializations define the random number engine with two commonly used parameter sets:

Type Definition philox4x32 (C++26) std::philox_engine<std::uint_fast32_t, 32, 4, 10,
                   0xCD9E8D57, 0x9E3779B9,
                   0xD2511F53, 0xBB67AE85>[edit] philox4x64 (C++26) std::philox_engine<std::uint_fast64_t, 64, 4, 10,
                   0xCA5A826395121157, 0x9E3779B97F4A7C15,
                   0xD2E7470EE14C6C93, 0xBB67AE8584CAA73B>[edit] [edit] Nested types Type Definition result_type UIntType [edit] Data members w
(public static member constant) n
(public static member constant) r
(public static member constant) constexpr std::array<result_type, word_count / 2> multipliers

[static]

the multiplier sequence M
(public static member constant) constexpr std::array<result_type, word_count / 2> round_consts

[static]

the round constant sequence C
(public static member constant) 20111115u
(public static member constant) [edit] Member functions Construction and Seeding constructs the engine
(public member function) [edit] sets the current state of the engine
(public member function) [edit] sets the current counter of the engine
(public member function) [edit] Generation advances the engine's state and returns the generated value
(public member function) [edit] advances the engine's state by a specified amount
(public member function) [edit] Characteristics gets the smallest possible value in the output range
(public static member function) [edit] gets the largest possible value in the output range
(public static member function) [edit] [edit] Non-member functions compares the internal states of two pseudo-random number engines
(function) [edit] performs stream input and output on pseudo-random number engine
(function template) [edit] [edit] Notes [edit] Example

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4