Namensräume
Varianten
Aktionen

std::piecewise_linear_distribution

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

std::piecewise_linear_distribution erzeugt Zufallszahlen mit Gleitkommazahlen, die gemäß einer linearen Wahrscheinlichkeitsdichtefunktion innerhalb jedes der mehreren Teilintervalle [bi, bi+1) verteilt sind. Die Verteilung ist so beschaffen, dass die Wahrscheinlichkeitsdichte an jeder Intervallgrenze genau dem vordefinierten Wert pi entspricht.

Die Wahrscheinlichkeitsdichte für jedes bi≤x<bi+1 ist pi
bi+1-x
bi+1-bi
+ pi+1
x-bi
bi+1-bi
, wobei die Wahrscheinlichkeitsdichten an den Intervallgrenzen pk als wk/S berechnet werden, wobei S die Summe aller
1
2
(wk+wk+1)(bk+1−bk)
ist.

Die Menge der Intervallgrenzen bi und die Menge der Gewichte an den Grenzen wi sind die Parameter dieser Verteilung.

std::piecewise_linear_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] Mitgliedstypen

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

[bearbeiten] Mitgliedsfunktionen

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-Mitgliedsfunktionen

(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 <iomanip>
#include <iostream>
#include <map>
#include <random>
#include <string>
 
int main()
{
    std::random_device rd;
    std::mt19937 gen{rd()};
    // increase the probability from 0 to 5
    // remain flat from 5 to 10
    // decrease from 10 to 15 at the same rate
    std::vector<double> i{0, 5, 10, 15};
    std::vector<double> w{0, 1, 1, 0};
    std::piecewise_linear_distribution<> d{i.begin(), i.end(), w.begin()};
 
    std::map<int, int> hist;
    for (int n{}; n < 1e4; ++n)
        ++hist[d(gen)];
 
    for (auto [x, y] : hist)
        std::cout << std::setw(2) << std::setfill('0') << x
                  << ' ' << std::string(y / 100, '*') << '\n';
}

Mögliche Ausgabe

00 *
01 ***
02 ****
03 ******
04 *********
05 *********
06 *********
07 **********
08 *********
09 **********
10 *********
11 *******
12 ****
13 ***
14 *