Namespaces
Variants

Standard library header <random> (C++11)

From cppreference.net
Standard library headers

Dieser Header ist Teil der Pseudo-Zufallszahlengenerierung Bibliothek.

Inhaltsverzeichnis

Includes

std::initializer_list Klassentemplate

Konzepte

Anforderungen an gleichmäßige Zufallsbitgeneratoren
spezifiziert, dass ein Typ als einheitlicher Zufallsbitgenerator qualifiziert
(Konzept)

Klassen

Zufallszahlengeneratoren
implementiert den linearen Kongruenzgenerator Algorithmus
(Klassentemplate)
implementiert den Mersenne-Twister Algorithmus
(Klassen-Template)
implementiert einen Subtract-with-Carry-( Lagged-Fibonacci )-Algorithmus
(Klassentemplate)
ein zählerbasierter parallelisierbarer Generator
(Klassentemplate)
Zufallszahlengenerator-Adapter
verwirft einen Teil der Ausgabe eines Zufallszahlengenerators
(Klassentemplate)
packt die Ausgabe einer Zufallszahlen-Engine in Blöcke mit einer bestimmten Anzahl von Bits
(Klassen-Template)
liefert die Ausgabe eines Zufallszahlengenerators in einer anderen Reihenfolge
(Klassentemplate)
Vordefinierte Generatoren
minstd_rand0 (C++11) std:: linear_congruential_engine < std:: uint_fast32_t ,
16807 , 0 , 2147483647 >

1969 von Lewis, Goodman und Miller entdeckt, 1988 von Park und Miller als "Minimalstandard" übernommen

minstd_rand (C++11)

std:: linear_congruential_engine < std:: uint_fast32_t ,
48271 , 0 , 2147483647 >
Neuerer "Minimum Standard", empfohlen von Park, Miller und Stockmeyer im Jahr 1993

mt19937 (C++11)

std:: mersenne_twister_engine < std:: uint_fast32_t ,
32 , 624 , 397 , 31 ,
0x9908b0df , 11 ,
0xffffffff , 7 ,
0x9d2c5680 , 15 ,
0xefc60000 , 18 , 1812433253 >
32-Bit-Mersenne-Twister von Matsumoto und Nishimura, 1998

mt19937_64 (C++11)

std:: mersenne_twister_engine < std:: uint_fast64_t ,
64 , 312 , 156 , 31 ,
0xb5026f5aa96619e9 , 29 ,
0x5555555555555555 , 17 ,
0x71d67fffeda60000 , 37 ,
0xfff7eee000000000 , 43 ,
6364136223846793005 >
64-Bit-Mersenne-Twister von Matsumoto und Nishimura, 2000

ranlux24_base (C++11) std:: subtract_with_carry_engine < std:: uint_fast32_t , 24 , 10 , 24 >
ranlux48_base (C++11) std:: subtract_with_carry_engine < std:: uint_fast64_t , 48 , 5 , 12 >
ranlux24 (C++11) std:: discard_block_engine < std:: ranlux24_base , 223 , 23 >

24-Bit RANLUX-Generator von Martin Lüscher und Fred James, 1994

ranlux48 (C++11) std:: discard_block_engine < std:: ranlux48_base , 389 , 11 >

48-Bit RANLUX-Generator von Martin Lüscher und Fred James, 1994

knuth_b (C++11) std:: shuffle_order_engine < std:: minstd_rand0 , 256 >
philox4x32 (C++26) std:: philox_engine < std:: uint_fast32_t , 32 , 4 , 10 ,
0xCD9E8D57 , 0x9E3779B9 ,
0xD2511F53 , 0xBB67AE85 >
philox4x64 (C++26) std:: philox_engine < std:: uint_fast64_t , 64 , 4 , 10 ,
0xCA5A826395121157 , 0x9E3779B97F4A7C15 ,
0xD2E7470EE14C6C93 , 0xBB67AE8584CAA73B >
default_random_engine (C++11) ein implementierungsdefinierter RandomNumberEngine Typ
Nicht-deterministische Zufallszahlen
Nicht-deterministischer Zufallszahlengenerator unter Verwendung einer Hardware-Entropiequelle
(Klasse)
Gleichverteilungen
erzeugt gleichmäßig verteilte ganzzahlige Werte in einem Bereich
(Klassentemplate)
erzeugt gleichmäßig verteilte reelle Werte in einem Bereich
(Klassentemplate)
Bernoulli-Verteilungen
erzeugt bool -Werte gemäß einer Bernoulli-Verteilung
(Klasse)
erzeugt ganzzahlige Werte gemäß einer Binomialverteilung
(Klassentemplate)
erzeugt ganzzahlige Werte gemäß einer negativen Binomialverteilung
(Klassentemplate)
erzeugt Ganzzahlwerte gemäß einer geometrischen Verteilung
(Klassentemplate)
Poisson-Verteilungen
erzeugt ganzzahlige Werte gemäß einer Poisson-Verteilung
(Klassen-Template)
erzeugt reelle Werte gemäß einer Exponentialverteilung
(Klassentemplate)
erzeugt reelle Werte gemäß einer Gamma-Verteilung
(Klassentemplate)
erzeugt reelle Werte gemäß einer Weibull-Verteilung
(Klassentemplate)
erzeugt reale Werte gemäß einer Extremwertverteilung
(Klassentemplate)
Normalverteilungen
erzeugt reale Werte gemäß einer Standardnormalverteilung (Gaußsche Normalverteilung)
(Klassentemplate)
erzeugt reelle Werte gemäß einer Lognormalverteilung
(Klassentemplate)
erzeugt reelle Werte gemäß einer Chi-Quadrat-Verteilung
(Klassen-Template)
erzeugt reelle Werte entsprechend einer Cauchy-Verteilung
(Klassentemplate)
erzeugt reelle Werte gemäß einer Fisher's F-Verteilung
(Klassentemplate)
erzeugt reelle Werte gemäß einer Student-t-Verteilung
(Klassentemplate)
Stichprobenverteilungen
erzeugt ganzzahlige Werte gemäß einer diskreten Verteilung
(Klassentemplate)
erzeugt reelle Werte, die auf konstanten Teilintervallen verteilt sind
(Klassentemplate)
erzeugt reelle Werte, die auf definierten Teilintervallen verteilt sind
(Klassentemplate)
Utilities
(C++11)
Allgemeiner voreingenommenheitsbeseitigender verwürfelter Seed-Sequenz-Generator
(Klasse)

Funktionen

Verteilt reelle Werte gegebener Genauigkeit gleichmäßig über [ 0 , 1 )
(Funktions-Template)
füllt einen Bereich mit Zufallszahlen von einem gleichverteilten Zufallsbitgenerator
(Algorithmus-Funktionsobjekt)

Übersicht

#include <initializer_list>
namespace std {
  // Anforderungen an gleichmäßige Zufallsbitgeneratoren
  template<class G>
  concept uniform_random_bit_generator = /* siehe Beschreibung */; // freestanding
  // Klassentemplate linear_congruential_engine
  template<class UIntType, UIntType a, UIntType c, UIntType m>
  class linear_congruential_engine;                             // teilweise freistehend
  // Klassentemplate mersenne_twister_engine
  template<class UIntType,
           size_t w,
           size_t n,
           size_t m,
           size_t r,
           UIntType a,
           size_t u,
           UIntType d,
           size_t s,
           UIntType b,
           size_t t,
           UIntType c,
           size_t l,
           UIntType f>
  class mersenne_twister_engine;                                // teilweise freistehend
  // Klassentemplate subtract_with_carry_engine
  template<class UIntType, size_t w, size_t s, size_t r>
  class subtract_with_carry_engine;                             // teilweise freistehend
  // Klassentemplate discard_block_engine
  template<class Engine, size_t p, size_t r>
  class discard_block_engine;                                   // teilweise freistehend
  // Klassentemplate independent_bits_engine
  template<class Engine, size_t w, class UIntType>
  class independent_bits_engine;                                // teilweise freistehend
  // Klassentemplate shuffle_order_engine
  template<class Engine, size_t k>
  class shuffle_order_engine;
  // Klassentemplate philox_engine
  template<class UIntType, size_t w, size_t n, size_t r, UIntType... consts>
  class philox_engine;                                          // teilweise freistehend
  // Engines und Engine-Adapter mit vordefinierten Parametern
  using minstd_rand0          = /* siehe Beschreibung */;          // freestanding
  using minstd_rand           = /* siehe Beschreibung */;          // freestanding
  using mt19937               = /* siehe Beschreibung */;          // freestanding
  using mt19937_64            = /* siehe Beschreibung */;          // freestanding
  using ranlux24_base         = /* siehe Beschreibung */;          // freestanding
  using ranlux48_base         = /* siehe Beschreibung */;          // freestanding
  using ranlux24              = /* siehe Beschreibung */;          // freestanding
  using ranlux48              = /* siehe Beschreibung */;          // freestanding
  using knuth_b               = /* siehe Beschreibung */;
  using philox4x32            = /* siehe Beschreibung */;          // freestanding
  using philox4x64            = /* siehe Beschreibung */;          // freestanding
  using default_random_engine = /* siehe Beschreibung */;
  // Klasse random_device
  class random_device;
  // class seed_seq
  class seed_seq;
  // Funktionsvorlage generate_canonical
  template<class RealType, size_t digits, class URBG>
  RealType generate_canonical(URBG& g);
  namespace ranges {
    // generate_random
    template<class R, class G>
      requires output_range<R, invoke_result_t<G&>> &&
               uniform_random_bit_generator<remove_cvref_t<G>>
    constexpr borrowed_iterator_t<R> generate_random(R&& r, G&& g);
    template<class G, output_iterator<invoke_result_t<G&>> O, sentinel_for<O> S>
      requires uniform_random_bit_generator<remove_cvref_t<G>>
    constexpr O generate_random(O first, S last, G&& g);
    template<class R, class G, class D>
      requires output_range<R, invoke_result_t<D&, G&>> && invocable<D&, G&> &&
               uniform_random_bit_generator<remove_cvref_t<G>> &&
               is_arithmetic_v<invoke_result_t<D&, G&>>
    constexpr borrowed_iterator_t<R> generate_random(R&& r, G&& g, D&& d);
    template<class G, class D,
             output_iterator<invoke_result_t<D&, G&>> O, sentinel_for<O> S>
      requires invocable<D&, G&> && uniform_random_bit_generator<remove_cvref_t<G>> &&
               is_arithmetic_v<invoke_result_t<D&, G&>>
    constexpr O generate_random(O first, S last, G&& g, D&& d);
  }
  // class template uniform_int_distribution
  template<class IntType = int>
  class uniform_int_distribution;                               // teilweise freistehend
  // Klassentemplate uniform_real_distribution
  template<class RealType = double>
  class uniform_real_distribution;
  // class bernoulli_distribution
  class bernoulli_distribution;
  // Klassentemplate binomial_distribution
  template<class IntType = int>
  class binomial_distribution;
  // Klassentemplate geometric_distribution
  template<class IntType = int>
  class geometric_distribution;
  // class template negative_binomial_distribution
  template<class IntType = int>
  class negative_binomial_distribution;
  // Klassentemplate poisson_distribution
  template<class IntType = int>
  class poisson_distribution;
  // Klassentemplate exponential_distribution
  template<class RealType = double>
  class exponential_distribution;
  // Klassentemplate gamma_distribution
  template<class RealType = double>
  class gamma_distribution;
  // Klassentemplate weibull_distribution
  template<class RealType = double>
  class weibull_distribution;
  // Klassentemplate extreme_value_distribution
  template<class RealType = double>
  class extreme_value_distribution;
  // Klassentemplate normal_distribution
  template<class RealType = double>
  class normal_distribution;
  // class template lognormal_distribution
  template<class RealType = double>
  class lognormal_distribution;
  // Klassentemplate chi_squared_distribution
  template<class RealType = double>
  class chi_squared_distribution;
  // class template cauchy_distribution
  template<class RealType = double>
  class cauchy_distribution;
  // Klassentemplate fisher_f_distribution
  template<class RealType = double>
  class fisher_f_distribution;
  // Klassentemplate student_t_distribution
  template<class RealType = double>
  class student_t_distribution;
  // Klassentemplate discrete_distribution
  template<class IntType = int>
  class discrete_distribution;
  // Klassentemplate piecewise_constant_distribution
  template<class RealType = double>
  class piecewise_constant_distribution;
  // Klassentemplate piecewise_linear_distribution
  template<class RealType = double>
  class piecewise_linear_distribution;
}

Konzept uniform_random_bit_generator

namespace std {
  template<class G>
  concept uniform_random_bit_generator =
    invocable<G&> && unsigned_integral<invoke_result_t<G&>> && requires {
      {
        G::min()
      } -> same_as<invoke_result_t<G&>>;
      {
        G::max()
      } -> same_as<invoke_result_t<G&>>;
      requires bool_constant<(G::min() < G::max())>::value;
    };
}
**Anmerkung:** Der gesamte Code innerhalb der `
` und `` Tags wurde gemäß den Anweisungen nicht übersetzt, da es sich um C++-Code handelt. Die HTML-Tags und Attribute wurden ebenfalls unverändert beibehalten. Es gab keinen anderen Text außerhalb der Code-Blöcke zu übersetzen.

Klassentemplate std::linear_congruential_engine

namespace std {
  template<class UIntType, UIntType a, UIntType c, UIntType m>
  class linear_congruential_engine
  {
  public:
    // Typen
    using result_type = UIntType;
    // Engine-Eigenschaften
    static constexpr result_type multiplier = a;
    static constexpr result_type increment  = c;
    static constexpr result_type modulus    = m;
    static constexpr result_type min() { return c == 0u ? 1u : 0u; }
    static constexpr result_type max() { return m - 1u; }
    static constexpr result_type default_seed = 1u;
    // Konstruktoren und Seeding-Funktionen
    linear_congruential_engine()
      : linear_congruential_engine(default_seed)
    {
    }
    explicit linear_congruential_engine(result_type s);
    template<class Sseq>
    explicit linear_congruential_engine(Sseq& q);
    void seed(result_type s = default_seed);
    template<class Sseq>
    void seed(Sseq& q);
    // Gleichheitsoperatoren
    friend bool operator==(const linear_congruential_engine& x,
                           const linear_congruential_engine& y);
    // Generierungsfunktionen
    result_type operator()();
    void discard(unsigned long long z);
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // gehostet
                 const linear_congruential_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // gehostet
                 linear_congruential_engine& x);
  };
}

Klassentemplate std::mersenne_twister_engine

namespace std {
  template<class UIntType,
           size_t w,
           size_t n,
           size_t m,
           size_t r,
           UIntType a,
           size_t u,
           UIntType d,
           size_t s,
           UIntType b,
           size_t t,
           UIntType c,
           size_t l,
           UIntType f>
  class mersenne_twister_engine
  {
  public:
    // Typen
    using result_type = UIntType;
    // Engine-Eigenschaften
    static constexpr size_t word_size                   = w;
    static constexpr size_t state_size                  = n;
    static constexpr size_t shift_size                  = m;
    static constexpr size_t mask_bits                   = r;
    static constexpr UIntType xor_mask                  = a;
    static constexpr size_t tempering_u                 = u;
    static constexpr UIntType tempering_d               = d;
    static constexpr size_t tempering_s                 = s;
    static constexpr UIntType tempering_b               = b;
    static constexpr size_t tempering_t                 = t;
    static constexpr UIntType tempering_c               = c;
    static constexpr size_t tempering_l                 = l;
    static constexpr UIntType initialization_multiplier = f;
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return /*2^w - 1*/; }
    static constexpr result_type default_seed = 5489u;
    // Konstruktoren und Seeding-Funktionen
    mersenne_twister_engine()
      : mersenne_twister_engine(default_seed)
    {
    }
    explicit mersenne_twister_engine(result_type value);
    template<class Sseq>
    explicit mersenne_twister_engine(Sseq& q);
    void seed(result_type value = default_seed);
    template<class Sseq>
    void seed(Sseq& q);
    // Gleichheitsoperatoren
    friend bool operator==(const mersenne_twister_engine& x,
                           const mersenne_twister_engine& y);
    // Generierungsfunktionen
    result_type operator()();
    void discard(unsigned long long z);
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // gehostet
                 const mersenne_twister_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // gehostet
                 mersenne_twister_engine& x);
  };
}

Klassentemplate std::subtract_with_carry_engine

namespace std {
  template<class UIntType, size_t w, size_t s, size_t r>
  class subtract_with_carry_engine
  {
  public:
    // Typen
    using result_type = UIntType;
    // Engine-Eigenschaften
    static constexpr size_t word_size = w;
    static constexpr size_t short_lag = s;
    static constexpr size_t long_lag  = r;
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return /*m - 1*/; }
    static constexpr uint_least32_t default_seed = 19780503u;
    // Konstruktoren und Seeding-Funktionen
    subtract_with_carry_engine()
      : subtract_with_carry_engine(0u)
    {
    }
    explicit subtract_with_carry_engine(result_type value);
    template<class Sseq>
    explicit subtract_with_carry_engine(Sseq& q);
    void seed(result_type value = 0u);
    template<class Sseq>
    void seed(Sseq& q);
    // Gleichheitsoperatoren
    friend bool operator==(const subtract_with_carry_engine& x,
                           const subtract_with_carry_engine& y);
    // Generierungsfunktionen
    result_type operator()();
    void discard(unsigned long long z);
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // gehostet
                 const subtract_with_carry_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // gehostet
                 subtract_with_carry_engine& x);
  };
}

Klassentemplate std::philox_engine

namespace std {
  template<class UIntType, size_t w, size_t n, size_t r, UIntType... consts>
  class philox_engine
  {
    static constexpr size_t /*array-size*/ = n / 2; // nur zur Darstellung
  public:
    // Typen
    using result_type = UIntType;
    // Engine-Eigenschaften
    static constexpr size_t word_size   = w;
    static constexpr size_t word_count  = n;
    static constexpr size_t round_count = r;
    static constexpr array<result_type, /*array-size*/> multipliers;
    static constexpr array < result_type, @exposition onlyid { array - size > }
    @round_consts;
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return m - 1; }
    static constexpr result_type default_seed = 20111115u;
    // Konstruktoren und Seeding-Funktionen
    philox_engine()
      : philox_engine(default_seed)
    {
    }
    explicit philox_engine(result_type value);
    template<class Sseq>
    explicit philox_engine(Sseq& q);
    void seed(result_type value = default_seed);
    template<class Sseq>
    void seed(Sseq& q);
    void set_counter(const array<result_type, n>& counter);
    // Gleichheitsoperatoren
    friend bool operator==(const philox_engine& x, const philox_engine& y);
    // Generierungsfunktionen
    result_type operator()();
    void discard(unsigned long long z);
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // gehostet
                 const philox_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // gehostet
                 philox_engine& x);
  };
}

Klassentemplate std::discard_block_engine

namespace std {
  template<class Engine, size_t p, size_t r>
  class discard_block_engine
  {
  public:
    // Typen
    using result_type = typename Engine::result_type;
    // Engine-Eigenschaften
    static constexpr size_t block_size = p;
    static constexpr size_t used_block = r;
    static constexpr result_type min() { return Engine::min(); }
    static constexpr result_type max() { return Engine::max(); }
    // Konstruktoren und Seeding-Funktionen
    discard_block_engine();
    explicit discard_block_engine(const Engine& e);
    explicit discard_block_engine(Engine&& e);
    explicit discard_block_engine(result_type s);
    template<class Sseq>
    explicit discard_block_engine(Sseq& q);
    void seed();
    void seed(result_type s);
    template<class Sseq>
    void seed(Sseq& q);
    // Gleichheitsoperatoren
    friend bool operator==(const discard_block_engine& x, const discard_block_engine& y);
    // Generierungsfunktionen
    result_type operator()();
    void discard(unsigned long long z);
    // Eigenschaftsfunktionen
    const Engine& base() const noexcept { return e; }
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // gehostet
                 const discard_block_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // gehostet
                 discard_block_engine& x);
  private:
    Engine e; // nur zur Darstellung
    size_t n; // nur zur Darstellung
  };
}

Klassentemplate std::independent_bits_engine

namespace std {
  template<class Engine, size_t w, class UIntType>
  class independent_bits_engine
  {
  public:
    // Typen
    using result_type = UIntType;
    // Engine-Eigenschaften
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return /*2^w - 1*/; }
    // Konstruktoren und Seeding-Funktionen
    independent_bits_engine();
    explicit independent_bits_engine(const Engine& e);
    explicit independent_bits_engine(Engine&& e);
    explicit independent_bits_engine(result_type s);
    template<class Sseq>
    explicit independent_bits_engine(Sseq& q);
    void seed();
    void seed(result_type s);
    template<class Sseq>
    void seed(Sseq& q);
    // Gleichheitsoperatoren
    friend bool operator==(const independent_bits_engine& x,
                           const independent_bits_engine& y);
    // Generierungsfunktionen
    result_type operator()();
    void discard(unsigned long long z);
    // Eigenschaftsfunktionen
    const Engine& base() const noexcept { return e; }
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // gehostet
                 const independent_bits_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // gehostet
                 independent_bits_engine& x);
  private:
    Engine e; // nur zur Darstellung
  };
}

Klassentemplate std::shuffle_order_engine

namespace std {
  template<class Engine, size_t k>
  class shuffle_order_engine
  {
  public:
    // Typen
    using result_type = typename Engine::result_type;
    // Engine-Eigenschaften
    static constexpr size_t table_size = k;
    static constexpr result_type min() { return Engine::min(); }
    static constexpr result_type max() { return Engine::max(); }
    // Konstruktoren und Seeding-Funktionen
    shuffle_order_engine();
    explicit shuffle_order_engine(const Engine& e);
    explicit shuffle_order_engine(Engine&& e);
    explicit shuffle_order_engine(result_type s);
    template<class Sseq>
    explicit shuffle_order_engine(Sseq& q);
    void seed();
    void seed(result_type s);
    template<class Sseq>
    void seed(Sseq& q);
    // Gleichheitsoperatoren
    friend bool operator==(const shuffle_order_engine& x, const shuffle_order_engine& y);
    // Generierungsfunktionen
    result_type operator()();
    void discard(unsigned long long z);
    // Eigenschaftsfunktionen
    const Engine& base() const noexcept { return e; }
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const shuffle_order_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    shuffle_order_engine& x);
  private:
    Engine e;         // nur zur Darstellung
    result_type V[k]; // nur zur Darstellung
    result_type Y;    // nur zur Darstellung
  };
}

Engines und Engine-Adapter mit vordefinierten Parametern

namespace std {
using minstd_rand0 = linear_congruential_engine<uint_fast32_t, 16'807, 0, 2'147'483'647>;
using minstd_rand = linear_congruential_engine<uint_fast32_t, 48'271, 0, 2'147'483'647>;
using mt19937 = mersenne_twister_engine<uint_fast32_t,
                                        32,
                                        624,
                                        397,
                                        31,
                                        0x9908'b0df,
                                        11,
                                        0xffff'ffff,
                                        7,
                                        0x9d2c'5680,
                                        15,
                                        0xefc6'0000,
                                        18,
                                        1'812'433'253>; //'
using mt19937_64 = mersenne_twister_engine<uint_fast64_t,
                                           64,
                                           312,
                                           156,
                                           31,
                                           0xb502'6f5a'a966'19e9,
                                           29,
                                           0x5555'5555'5555'5555,
                                           17,
                                           0x71d6'7fff'eda6'0000,
                                           37,
                                           0xfff7'eee0'0000'0000,
                                           43,
                                           6'364'136'223'846'793'005>;
using ranlux24_base = subtract_with_carry_engine<uint_fast32_t, 24, 10, 24>;
using ranlux48_base = subtract_with_carry_engine<uint_fast64_t, 48, 5, 12>;
using ranlux24 = discard_block_engine<ranlux24_base, 223, 23>;
using ranlux48 = discard_block_engine<ranlux48_base, 389, 11>;
using knuth_b = shuffle_order_engine<minstd_rand0, 256>;
using default_random_engine = /* implementierungsdefiniert */;
using philox4x32 = philox_engine<uint_fast32_t,
                                 32,
                                 4,
                                 10,
                                 0xD2511F53,
                                 0x9E3779B9,
                                 0xCD9E8D57,
                                 0xBB67AE85>;
using philox4x64 = philox_engine<uint_fast64_t,
                                 64,
                                 4,
                                 10,
                                 0xD2E7470EE14C6C93,
                                 0x9E3779B97F4A7C15,
                                 0xCA5A826395121157,
                                 0xBB67AE8584CAA73B>;
}

Klasse std::random_device

namespace std {
  class random_device
  {
  public:
    // Typen
    using result_type = unsigned int;
    // Generator-Eigenschaften
    static constexpr result_type min() { return numeric_limits<result_type>::min(); }
    static constexpr result_type max() { return numeric_limits<result_type>::max(); }
    // Konstruktoren
    random_device()
      : random_device(/* implementation-defined */)
    {
    }
    explicit random_device(const string& token);
    // Erzeugungsfunktionen
    result_type operator()();
    // Eigenschaftsfunktionen
    double entropy() const noexcept;
    // Keine Kopierfunktionen
    random_device(const random_device&)  = delete;
    void operator=(const random_device&) = delete;
  };
}

Klasse std::seed_seq

namespace std {
  class seed_seq
  {
  public:
    // Typen
    using result_type = uint_least32_t;
    // Konstruktoren
    seed_seq() noexcept;
    template<class T>
    seed_seq(initializer_list<T> il);
    template<class InputIter>
    seed_seq(InputIter begin, InputIter end);
    // Generierungsfunktionen
    template<class RandomAccessIter>
    void generate(RandomAccessIter begin, RandomAccessIter end);
    // Eigenschaftsfunktionen
    size_t size() const noexcept;
    template<class OutputIter>
    void param(OutputIter dest) const;
    // Keine Kopierfunktionen
    seed_seq(const seed_seq&)       = delete;
    void operator=(const seed_seq&) = delete;
  private:
    vector<result_type> v; // nur zur Darstellung
  };
}

Klassentemplate std::uniform_int_distribution

namespace std {
  template<class IntType = int>
  class uniform_int_distribution
  {
  public:
    // Typen
    using result_type = IntType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    uniform_int_distribution()
      : uniform_int_distribution(0)
    {
    }
    explicit uniform_int_distribution(IntType a,
                                      IntType b = numeric_limits<IntType>::max());
    explicit uniform_int_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const uniform_int_distribution& x,
                           const uniform_int_distribution& y);
    // Generierungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    result_type a() const;
    result_type b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // gehostet
                 const uniform_int_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // gehostet
                 uniform_int_distribution& x);
  };
}

Klassentemplate std::uniform_real_distribution

namespace std {
  template<class RealType = double>
  class uniform_real_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    uniform_real_distribution()
      : uniform_real_distribution(0.0)
    {
    }
    explicit uniform_real_distribution(RealType a, RealType b = 1.0);
    explicit uniform_real_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const uniform_real_distribution& x,
                           const uniform_real_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    result_type a() const;
    result_type b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const uniform_real_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    uniform_real_distribution& x);
  };
}

Klasse std::bernoulli_distribution

namespace std {
  class bernoulli_distribution
  {
  public:
    // Typen
    using result_type = bool;
    using param_type  = /* unspecified */;
    // Konstruktoren und Reset-Funktionen
    bernoulli_distribution()
      : bernoulli_distribution(0.5)
    {
    }
    explicit bernoulli_distribution(double p);
    explicit bernoulli_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const bernoulli_distribution& x,
                           const bernoulli_distribution& y);
    // Generierungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const bernoulli_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    bernoulli_distribution& x);
  };
}

Klassentemplate std::binomial_distribution

namespace std {
  template<class IntType = int>
  class binomial_distribution
  {
  public:
    // Typen
    using result_type = IntType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    binomial_distribution()
      : binomial_distribution(1)
    {
    }
    explicit binomial_distribution(IntType t, double p = 0.5);
    explicit binomial_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const binomial_distribution& x,
                           const binomial_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    IntType t() const;
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const binomial_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    binomial_distribution& x);
  };
}

Klassentemplate std::geometric_distribution

namespace std {
  template<class IntType = int>
  class geometric_distribution
  {
  public:
    // Typen
    using result_type = IntType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    geometric_distribution()
      : geometric_distribution(0.5)
    {
    }
    explicit geometric_distribution(double p);
    explicit geometric_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const geometric_distribution& x,
                           const geometric_distribution& y);
    // Generierungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const geometric_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    geometric_distribution& x);
  };
}

Klassentemplate std::negative_binomial_distribution

namespace std {
  template<class IntType = int>
  class negative_binomial_distribution
  {
  public:
    // Typen
    using result_type = IntType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktor- und Reset-Funktionen
    negative_binomial_distribution()
      : negative_binomial_distribution(1)
    {
    }
    explicit negative_binomial_distribution(IntType k, double p = 0.5);
    explicit negative_binomial_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const negative_binomial_distribution& x,
                           const negative_binomial_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    IntType k() const;
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(
      basic_ostream<CharT, Traits>& os,
      const negative_binomial_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    negative_binomial_distribution& x);
  };
}

Klassentemplate std::poisson_distribution

namespace std {
  template<class IntType = int>
  class poisson_distribution
  {
  public:
    // Typen
    using result_type = IntType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    poisson_distribution()
      : poisson_distribution(1.0)
    {
    }
    explicit poisson_distribution(double mean);
    explicit poisson_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const poisson_distribution& x, const poisson_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    double mean() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const poisson_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    poisson_distribution& x);
  };
}

Klassentemplate std::exponential_distribution

namespace std {
  template<class RealType = double>
  class exponential_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    exponential_distribution()
      : exponential_distribution(1.0)
    {
    }
    explicit exponential_distribution(RealType lambda);
    explicit exponential_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const exponential_distribution& x,
                           const exponential_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    RealType lambda() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const exponential_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    exponential_distribution& x);
  };
}

Klassentemplate std::gamma_distribution

namespace std {
  template<class RealType = double>
  class gamma_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    gamma_distribution()
      : gamma_distribution(1.0)
    {
    }
    explicit gamma_distribution(RealType alpha, RealType beta = 1.0);
    explicit gamma_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const gamma_distribution& x, const gamma_distribution& y);
    // Generierungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    RealType alpha() const;
    RealType beta() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const gamma_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    gamma_distribution& x);
  };
}

Klassentemplate std::weibull_distribution

namespace std {
  template<class RealType = double>
  class weibull_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    weibull_distribution()
      : weibull_distribution(1.0)
    {
    }
    explicit weibull_distribution(RealType a, RealType b = 1.0);
    explicit weibull_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const weibull_distribution& x, const weibull_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    RealType a() const;
    RealType b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const weibull_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    weibull_distribution& x);
  };
}

Klassentemplate std::extreme_value_distribution

namespace std {
  template<class RealType = double>
  class extreme_value_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktor- und Reset-Funktionen
    extreme_value_distribution()
      : extreme_value_distribution(0.0)
    {
    }
    explicit extreme_value_distribution(RealType a, RealType b = 1.0);
    explicit extreme_value_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const extreme_value_distribution& x,
                           const extreme_value_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    RealType a() const;
    RealType b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const extreme_value_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    extreme_value_distribution& x);
  };
}

Klassentemplate std::normal_distribution

namespace std {
  template<class RealType = double>
  class normal_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    normal_distribution()
      : normal_distribution(0.0)
    {
    }
    explicit normal_distribution(RealType mean, RealType stddev = 1.0);
    explicit normal_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const normal_distribution& x, const normal_distribution& y);
    // Generierungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    RealType mean() const;
    RealType stddev() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const normal_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    normal_distribution& x);
  };
}

Klassentemplate std::lognormal_distribution

namespace std {
  template<class RealType = double>
  class lognormal_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    lognormal_distribution()
      : lognormal_distribution(0.0)
    {
    }
    explicit lognormal_distribution(RealType m, RealType s = 1.0);
    explicit lognormal_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const lognormal_distribution& x,
                           const lognormal_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    RealType m() const;
    RealType s() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const lognormal_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    lognormal_distribution& x);
  };
}

Klassentemplate std::chi_squared_distribution

namespace std {
  template<class RealType = double>
  class chi_squared_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktor- und Reset-Funktionen
    chi_squared_distribution()
      : chi_squared_distribution(1.0)
    {
    }
    explicit chi_squared_distribution(RealType n);
    explicit chi_squared_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const chi_squared_distribution& x,
                           const chi_squared_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    RealType n() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const chi_squared_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    chi_squared_distribution& x);
  };
}

Klassentemplate std::cauchy_distribution

namespace std {
  template<class RealType = double>
  class cauchy_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktor- und Reset-Funktionen
    cauchy_distribution()
      : cauchy_distribution(0.0)
    {
    }
    explicit cauchy_distribution(RealType a, RealType b = 1.0);
    explicit cauchy_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const cauchy_distribution& x, const cauchy_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    RealType a() const;
    RealType b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const cauchy_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    cauchy_distribution& x);
  };
}

Klassentemplate std::fisher_f_distribution

namespace std {
  template<class RealType = double>
  class fisher_f_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktor- und Reset-Funktionen
    fisher_f_distribution()
      : fisher_f_distribution(1.0)
    {
    }
    explicit fisher_f_distribution(RealType m, RealType n = 1.0);
    explicit fisher_f_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const fisher_f_distribution& x,
                           const fisher_f_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    RealType m() const;
    RealType n() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const fisher_f_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    fisher_f_distribution& x);
  };
}

Klassentemplate std::student_t_distribution

namespace std {
  template<class RealType = double>
  class student_t_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktor- und Reset-Funktionen
    student_t_distribution()
      : student_t_distribution(1.0)
    {
    }
    explicit student_t_distribution(RealType n);
    explicit student_t_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const student_t_distribution& x,
                           const student_t_distribution& y);
    // Generierungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    RealType n() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const student_t_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    student_t_distribution& x);
  };
}

Klassentemplate std::discrete_distribution

namespace std {
  template<class IntType = int>
  class discrete_distribution
  {
  public:
    // Typen
    using result_type = IntType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    discrete_distribution();
    template<class InputIter>
    discrete_distribution(InputIter firstW, InputIter lastW);
    discrete_distribution(initializer_list<double> wl);
    template<class UnaryOperation>
    discrete_distribution(size_t nw, double xmin, double xmax, UnaryOperation fw);
    explicit discrete_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const discrete_distribution& x,
                           const discrete_distribution& y);
    // Erzeugungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    vector<double> probabilities() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const discrete_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    discrete_distribution& x);
  };
}

Klassentemplate std::piecewise_constant_distribution

namespace std {
  template<class RealType = double>
  class piecewise_constant_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    piecewise_constant_distribution();
    template<class InputIterB, class InputIterW>
    piecewise_constant_distribution(InputIterB firstB,
                                    InputIterB lastB,
                                    InputIterW firstW);
    template<class UnaryOperation>
    piecewise_constant_distribution(initializer_list<RealType> bl, UnaryOperation fw);
    template<class UnaryOperation>
    piecewise_constant_distribution(size_t nw,
                                    RealType xmin,
                                    RealType xmax,
                                    UnaryOperation fw);
    explicit piecewise_constant_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const piecewise_constant_distribution& x,
                           const piecewise_constant_distribution& y);
    // Generierungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    vector<result_type> intervals() const;
    vector<result_type> densities() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(
      basic_ostream<CharT, Traits>& os,
      const piecewise_constant_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    piecewise_constant_distribution& x);
  };
}

Klassentemplate std::piecewise_linear_distribution

namespace std {
  template<class RealType = double>
  class piecewise_linear_distribution
  {
  public:
    // Typen
    using result_type = RealType;
    using param_type  = /* nicht spezifiziert */;
    // Konstruktoren und Reset-Funktionen
    piecewise_linear_distribution();
    template<class InputIterB, class InputIterW>
    piecewise_linear_distribution(InputIterB firstB, InputIterB lastB, InputIterW firstW);
    template<class UnaryOperation>
    piecewise_linear_distribution(initializer_list<RealType> bl, UnaryOperation fw);
    template<class UnaryOperation>
    piecewise_linear_distribution(size_t nw,
                                  RealType xmin,
                                  RealType xmax,
                                  UnaryOperation fw);
    explicit piecewise_linear_distribution(const param_type& parm);
    void reset();
    // Gleichheitsoperatoren
    friend bool operator==(const piecewise_linear_distribution& x,
                           const piecewise_linear_distribution& y);
    // Generierungsfunktionen
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // Eigenschaftsfunktionen
    vector<result_type> intervals() const;
    vector<result_type> densities() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // Einfüge- und Extraktionsoperatoren
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(
      basic_ostream<CharT, Traits>& os,
      const piecewise_linear_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    piecewise_linear_distribution& x);
  };
}