Namensräume
Varianten
Aktionen

std::piecewise_constant_distribution

Von cppreference.com
< cpp‎ | numeric‎ | random
 
 
 
 
 
Definiert in Header <random>
template< class RealType = double >
class piecewise_constant_distribution;
(seit C++11)

std::piecewise_constant_distribution erzeugt Zufalls-Gleitkommazahlen, die innerhalb jedes der mehreren Teilintervalle [bi, bi+1) gleichmäßig verteilt sind, jedes mit seinem eigenen Gewicht wi. Die Menge der Intervallgrenzen und die Menge der Gewichte sind die Parameter dieser Verteilung.

Die Wahrscheinlichkeitsdichte für jedes bi ≤ x <bi+1 ist
wi
S (bi+1 - bi)
, wobei S die Summe aller Gewichte ist.

std::piecewise_constant_distribution erfüllt alle Anforderungen von RandomNumberDistribution.

Inhalt

[bearbeiten] Template-Parameter

RealType - Der Rückgabetyp, der vom Generator erzeugt wird. Die Wirkung ist undefiniert, wenn dies nicht einer der Typen float, double oder long double ist.

[bearbeiten] Member-Typen

Mitgliedertyp Definition
result_type (C++11) RealType
param_type (C++11) Der Typ des Parametersets, siehe RandomNumberDistribution.

[bearbeiten] Member-Funktionen

erzeugt neue Verteilung
(public member function) [edit]
(C++11)
setzt den internen Zustand der Verteilung zurück
(public member function) [edit]
Generierung
erzeugt die nächste Zufallszahl in der Verteilung
(public member function) [edit]
Eigenschaften des Generators
gibt die Verteilungsparameter zurück
(public member function) [bearbeiten]
(C++11)
holt oder setzt das Parameterobjekt der Verteilung
(public member function) [edit]
(C++11)
gibt den minimalen potenziell generierten Wert zurück
(public member function) [edit]
(C++11)
gibt den maximalen potenziell generierten Wert zurück
(public member function) [edit]

[bearbeiten] Nicht-Member-Funktionen

(C++11)(C++11)(entfernt in C++20)
vergleicht zwei Verteilungsobjekte
(function) [bearbeiten]
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlendistributionen durch
(function template) [edit]

[bearbeiten] Beispiel

#include <iostream>
#include <map>
#include <random>
#include <string>
 
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    // 50% of the time, generate a random number between 0 and 1
    // 50% of the time, generate a random number between 10 and 15
    std::vector<double> i {0, 1, 10, 15};
    std::vector<double> w {1, 0, 1};
    std::piecewise_constant_distribution<> d(i.begin(), i.end(), w.begin());
 
    std::map<int, int> hist;
    for (int n {}; n < 1e4; ++n)
        ++hist[d(gen)];
 
    for (std::cout << std::hex << std::uppercase; auto [x, y] : hist)
        std::cout << x << ' ' << std::string(y / 100, '*') << '\n';
}

Mögliche Ausgabe

0 **************************************************
A **********
B *********
C *********
D **********
E *********

[bearbeiten] Referenzen

  • C++23 Standard (ISO/IEC 14882:2024)
  • 28.5.9.6.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst] (S. 1421-1422)
  • C++20 Standard (ISO/IEC 14882:2020)
  • 29.6.9.6.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst] (S. 1207-1208)
  • C++17 Standard (ISO/IEC 14882:2017)
  • 29.6.8.6.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst] (S. 1098-1100)
  • C++14 Standard (ISO/IEC 14882:2014)
  • 26.5.8.6.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst] (S. 962-964)
  • C++11 Standard (ISO/IEC 14882:2011)
  • 26.5.8.6.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst] (S. 955-957)