Namensräume
Varianten
Aktionen

std::geometric_distribution

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

Erzeugt zufällige nicht-negative ganze Zahlen i, die gemäß der diskreten Wahrscheinlichkeitsfunktion verteilt sind

P(i|p) = p · (1 − p)i

Der Wert repräsentiert die Anzahl der Fehlschläge in einer Reihe unabhängiger Ja/Nein-Versuche (jeder hat eine Erfolgswahrscheinlichkeit p), bevor genau 1 Erfolg eintritt.

std::geometric_distribution<>(p) ist exakt äquivalent zu std::negative_binomial_distribution<>(1, p). Sie ist auch das diskrete Gegenstück zu std::exponential_distribution.

std::geometric_distribution erfüllt RandomNumberDistribution.

Inhalt

[bearbeiten] Template-Parameter

IntType - Der von dem Generator erzeugte Ergebnistyp. Die Wirkung ist undefiniert, wenn dies nicht einer der folgenden Typen ist: short, int, long, long long, unsigned short, unsigned int, unsigned long oder unsigned long long.

[bearbeiten] Mitgliedstypen

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

[bearbeiten] Mitgliederfunktionen

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
(C++11)
gibt den Verteilungsparameter p zurück (Wahrscheinlichkeit eines Versuchs, der true generiert)
(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-Mitgliederfunktionen

(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

std::geometric_distribution<>(0.5) ist die Standardeinstellung und repräsentiert die Anzahl der Münzwürfe, die benötigt werden, um Kopf zu erhalten.

#include <iomanip>
#include <iostream>
#include <map>
#include <random>
#include <string>
 
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
 
    std::geometric_distribution<> d;
        // same as 
        // std::negative_binomial_distribution<> d(1, 0.5):
 
    std::map<int, int> hist;
    for (int n = 0; n != 10000; ++n)
        ++hist[d(gen)];
 
    for (auto [x, y] : hist)
    {
        const char c = x < 10 ? x + '0' : x - 10 + 'a';
        std::cout << c << ' ' << std::string(y / 100, '*') << '\n';
    }
}

Mögliche Ausgabe

0 *************************************************
1 *************************
2 ************
3 ******
4 **
5 *
6
7
8
9

[bearbeiten] Externe Links

Weisstein, Eric W. "Geometric Distribution." Von MathWorld – Eine Wolfram-Webressource.