Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::linear_congruential_engine

      From cppreference.com
      <cpp‎ |numeric‎ |random
       
       
       
      Pseudo-random number generation
       
       
      Defined in header<random>
      template<

         class UIntType,
          UIntType a,
          UIntType c,
          UIntType m

      >class linear_congruential_engine;
      (since C++11)

      linear_congruential_engine is a random number engine based onLinear congruential generator (LCG).

      Contents

      [edit]Template parameters

      UIntType - The result type generated by the generator. The effect is undefined if this is not one ofunsignedshort,unsignedint,unsignedlong, orunsignedlonglong.
      a - the multiplier term
      c - the increment term
      m - the modulus term

      Whenm is not zero, ifa>= m orc>= m istrue, the program is ill-formed.

      [edit]Generator properties

      Thesize of the states oflinear_congruential_engine is1, each of them consists of a single integer.

      The actual modulus\(\scriptsize m_0\)m0 is defined as follows:

      • Ifm is not zero,\(\scriptsize m_0\)m0 ism.
      • Ifm is zero,\(\scriptsize m_0\)m0 is the value ofstd::numeric_limits<result_type>::max() plus1 (which means\(\scriptsize m_0\)m0 need not be representable asresult_type).

      Thetransition algorithm oflinear_congruential_engine is\(\scriptsize TA(x_i) = (a \cdot x_i + c)\mod m_0\)TA(xi) = (a·xi+c) mod m0.

      Thegeneration algorithm oflinear_congruential_engine is\(\scriptsize GA(x_i) = (a \cdot x_i + c)\mod m_0\)GA(xi) = (a·xi+c) mod m0.

      The pseudo-random number generated with the current state is also the successor state.

      [edit]Predefined specializations

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

      Defined in header<random>
      Type Definition
      minstd_rand0(C++11)std::linear_congruential_engine<std::uint_fast32_t,
                                      16807,0,2147483647>

      Discovered in 1969 by Lewis, Goodman and Miller, adopted as "Minimal standard" in 1988 by Park and Miller[edit]

      minstd_rand(C++11)

      std::linear_congruential_engine<std::uint_fast32_t,
                                      48271,0,2147483647>
      Newer "Minimum standard", recommended by Park, Miller, and Stockmeyer in 1993[edit]

      [edit]Nested types

      Type Definition
      result_typeUIntType

      [edit]Data members

      constexpr UIntType multiplier
      [static]
      a
      (public static member constant)
      constexpr UIntType increment
      [static]
      c
      (public static member constant)
      constexpr UIntType modulus
      [static]
      m
      (public static member constant)
      constexpr UIntType default_seed
      [static]
      1u
      (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]
      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
      [static]
      gets the smallest possible value in the output range
      (public static member function)[edit]
      [static]
      gets the largest possible value in the output range
      (public static member function)[edit]

      [edit]Non-member functions

      (C++11)(C++11)(removed in C++20)
      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]Example

      This section is incomplete
      Reason: no example
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/numeric/random/linear_congruential_engine&oldid=175311"

      [8]ページ先頭

      ©2009-2025 Movatter.jp