FreeBSD Manual Pages
std::mersen...ster_engine(3) C++ Standard Libary std::mersen...ster_engine(3) NAME std::mersenne_twister_engine - std::mersenne_twister_engine Synopsis Defined in header <random> template< class UIntType, std::size_t w, std::size_t n, std::size_t m, std::size_t r, (since C++11) UIntType a, std::size_t u, UIntType d, std::size_t s, UIntType b, std::size_t t, UIntType c, std::size_t l, UIntType f > class mersenne_twister_engine; mersenne_twister_engine is a random number engine based on Mersenne Twister algorithm. It produces high quality, but not cryptographically se- cure, unsigned integer random numbers of type UIntType on the interval \(\script- size {[0,2^w)}\)[0, 2w ). Template parameters The result type generated by the generator. The effect is UIntType - undefined if this is not one of unsigned short, unsigned int, unsigned long, or unsigned long long. w - the power of two that determines the range of values generated by the engine n - the degree of recurrence m - the middle word, an offset used in the recur- rence relation defining the state r - the number of bits of the lower bit-mask, also known as the twist value a - the conditional xor-mask, i.e. the coeffi- cients of the rational normal form twist matrix u, d, s, b, t, c, l - the 1^st to 7^th components of the bit-scram- bling (tempering) matrix f - the initialization multiplier If any of the following restriction is violated, the program is ill- formed: * m is in [1, n]. * The following expressions are all true: * w >= 3 * w >= r * w >= u * w >= s * w >= t * w >= l * w <= std::numeric_limits<UIntType>::digits * Given (1u << w) - 1u as w1, the following expressions are all true: * a <= w1 * b <= w1 * c <= w1 * d <= w1 * f <= w1 Generator properties The size of the states of mersenne_twister_engine is n, each of them consists of a sequence X of n values of type result_type. \(X_j\)X j stands for the \(j\mod n\)j mod nth value (starting from 0) of X. Given the following bitwise operation notations: * \(\mathsf{bitand}\)bitand, built-in bitwise AND. * \(\mathsf{xor}\)xor, built-in bitwise XOR. * \(\mathsf{lshift}\)lshift, built-in bitwise left-shift. * \(\mathsf{rshift}\)rshift, built-in bitwise right-shift. The transition algorithm of mersenne_twister_engine (\(TA(x_i)\)TA(x i)) is defined as follows: 1. Concatenate the upper w - r bits of \(X_{i-n}\)X i-n with the lower r bits of \(X_{i+1-n}\)X i+1-n to obtain an unsigned integer value Y. 2. Let y be \(a \cdot (Y\ \mathsf{bitand}\ 1)\)a(Y bitand 1), and set \(X_i\)X i to \(X_{i+mn}\ \mathsf{xor}\ (Y\ \mathsf{rshift}\ 1)\ \mathsf{xor}\ y\)X i+mn xor (Y rshift 1) xor y. The generation algorithm of mersenne_twister_engine (\(GA(x_i)\)GA(x i)) is defined as follows: 1. Let \(z_1\)z 1 be \(X_i\ \mathsf{xor}\ ((X_i\ \mathsf{rshift}\ u)\ \mathsf{bitand}\ d)\)X i xor ((X i rshift u) bitand d). 2. Let \(z_2\)z 2 be \(z_1\ \mathsf{xor}\ (((z_1\ \mathsf{lshift}\ s)\mod 2^w)\ \mathsf{bitand}\ b)\)X i xor (((X i lshift s) mod 2w ) bitand b). 3. Let \(z_3\)z 3 be \(z_2\ \mathsf{xor}\ (((z_2\ \mathsf{lshift}\ t)\mod 2^w)\ \mathsf{bitand}\ c)\)X i xor (((X i lshift t) mod 2w ) bitand c). 4. Let \(z_4\)z 4 be \(z_3\ \mathsf{xor}\ (z_3\ \mathsf{rshift}\ l)\)z 3 xor (z 3 rshift l). 5. Deliver \(z_4\)z 4 as the result (i.e. \(GA(x_i)=z_4\)GA(x i)=z 4). Predefined specializations The following specializations define the random number engine with two commonly used parameter sets: Defined in header <random> Type Definition std::mersenne_twister_engine<std::uint_fast32_t, 32, 624, 397, 31, 0x9908b0df, 11, mt19937 (C++11) 0xffffffff, 7, 0x9d2c5680, 15, 0xefc60000, 18, 1812433253> 32-bit Mersenne Twister by Matsumoto and Nishimura, 1998 std::mersenne_twister_engine<std::uint_fast64_t, 64, 312, 156, 31, 0xb5026f5aa96619e9, 29, mt19937_64 (C++11) 0x5555555555555555, 17, 0x71d67fffeda60000, 37, 0xfff7eee000000000, 43, 6364136223846793005> 64-bit Mersenne Twister by Matsumoto and Nishimura, 2000 Nested types Type Definition result_type UIntType Data members constexpr size_t word_size w [static] (public static member constant) constexpr size_t state_size n [static] (public static member constant) constexpr size_t shift_size m [static] (public static member constant) constexpr size_t mask_bits r [static] (public static member constant) constexpr UIntType xor_mask a [static] (public static member constant) constexpr size_t tempering_u u [static] (public static member constant) constexpr UIntType tempering_d d [static] (public static member constant) constexpr size_t tempering_s s [static] (public static member constant) constexpr UIntType tempering_b b [static] (public static member constant) constexpr size_t tempering_t t [static] (public static member constant) constexpr UIntType tempering_c c [static] (public static member constant) constexpr size_t tempering_l l [static] (public static member constant) constexpr UIntType initialization_multiplier f [static] (public static member constant) constexpr UIntType default_seed 5489u [static] (public static member constant) Member functions Construction and Seeding constructor constructs the engine (C++11) (public member function) seed sets the current state of the engine (C++11) (public member function) Generation operator() advances the engine's state and returns the gener- ated value (C++11) (public member function) discard advances the engine's state by a specified amount (C++11) (public member function) Characteristics min gets the smallest possible value in the output range [static] (C++11) (public static member function) max gets the largest possible value in the output range [static] (C++11) (public static member function) Non-member functions operator== compares the internal states of two pseudo-random number operator!= engines (C++11) (function) (C++11)(removed in C++20) operator<< performs stream input and output on pseudo-random number operator>> engine (C++11) (function template) Notes The N^th consecutive invocation of a default-constructed engine is required to produce the following value: N The random engine type The value to produce 10000 std::mt19937 4123659995 10000 std::mt19937_64 9981545732273789042 This is to guarantee that the random engine is conforming to the standard (see N1398). // Run this code #include <cassert> #include <random> int main() { std::mt19937 gen32; std::mt19937_64 gen64; gen32.discard(10000 - 1); gen64.discard(10000 - 1); assert(gen32() == 4123659995); assert(gen64() == 9981545732273789042ull); } http://cppreference.com 2024.06.10 std::mersen...ster_engine(3)
NAME | Synopsis | Template parameters | Member functions | Construction and Seeding | Generation | Characteristics | Non-member functions | Notes
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::mersenne_twister_engine&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
