Partager via


normal_distribution, classe

Génère une distribution normale.

template<class RealType = double> class normal_distribution { public:     // types     typedef RealType result_type;     struct param_type;     // constructors and reset functions     explicit normal_distribution(RealType mean = 0.0, RealType stddev = 1.0);     explicit normal_distribution(const param_type& parm);     void reset();     // generating functions     template<class URNG>     result_type operator()(URNG& gen);     template<class URNG>     result_type operator()(URNG& gen, const param_type& parm);     // property functions     RealType mean() const;     RealType stddev() const;     param_type param() const;     void param(const param_type& parm);     result_type min() const;     result_type max() const; };

Paramètres

  • RealType
    Le type des résultats à virgule flottante est double par défaut. Pour plus d'informations sur les types possibles, voir <random>.

Notes

La classe de modèle décrit une distribution qui produit des valeurs d'un type intégral spécifié par l'utilisateur, ou du type double si aucun n'est fourni, distribuées selon une loi normale. Le tableau suivant contient des liens vers des articles sur différents membres.

normal_distribution::normal_distribution

normal_distribution::mean

normal_distribution::param

normal_distribution::operator()

normal_distribution::stddev

normal_distribution::param_type

Les fonctions de propriété mean() et stddev() retournent les valeurs des paramètres de distribution stockés mean et stddev, respectivement.

Pour plus d'informations sur les classes de distribution et leurs membres, voir <random>.

Pour plus d'informations sur la distribution normale, voir l'article de Wolfram MathWorld Normal Distribution.

Exemple

 

// compile with: /EHsc /W4
#include <random> 
#include <iostream>
#include <iomanip>
#include <string>
#include <map>

using namespace std;

void test(const double m, const double s, const int samples) {

    // uncomment to use a non-deterministic seed
    //    random_device gen;
    //    mt19937 gen(rd());
    mt19937 gen(1701);

    normal_distribution<> distr(m, s);

    cout << endl;
    cout << "min() == " << distr.min() << endl;
    cout << "max() == " << distr.max() << endl;
    cout << "m() == " << fixed << setw(11) << setprecision(10) << distr.mean() << endl;
    cout << "s() == " << fixed << setw(11) << setprecision(10) << distr.stddev() << endl;

    // generate the distribution as a histogram
    map<double, int> histogram;
    for (int i = 0; i < samples; ++i) {
        ++histogram[distr(gen)];
    }

    // print results
    cout << "Distribution for " << samples << " samples:" << endl;
    int counter = 0;
    for (const auto& elem : histogram) {
        cout << fixed << setw(11) << ++counter << ": "
            << setw(14) << setprecision(10) << elem.first << endl;
    }
    cout << endl;
}

int main()
{
    double m_dist = 1;
    double s_dist = 1;
    int samples = 10;

    cout << "Use CTRL-Z to bypass data entry and run using default values." << endl;
    cout << "Enter a floating point value for the 'mean' distribution parameter: ";
    cin >> m_dist;
    cout << "Enter a floating point value for the 'stddev' distribution parameter (must be greater than zero): ";
    cin >> s_dist;
    cout << "Enter an integer value for the sample count: ";
    cin >> samples;

    test(m_dist, s_dist, samples);
}

Sortie

Use CTRL-Z to bypass data entry and run using default values.
Enter a floating point value for the 'mean' distribution parameter: 0
Enter a floating point value for the 'stddev' distribution parameter (must be greater than zero): 1
Enter an integer value for the sample count: 10

min() == -1.79769e+308
max() == 1.79769e+308
m() == 0.0000000000
s() == 1.0000000000
Distribution for 10 samples:
          1:  -0.8845823965
          2:  -0.1995761116
          3:  -0.1162665130
          4:  -0.0685154932
          5:   0.0403741461
          6:   0.1591327792
          7:   1.0414389924
          8:   1.5876269426
          9:   1.6362637713
         10:   2.7821317338

Configuration requise

En-tête : <random>

Espace de noms : std

Voir aussi

Référence

<random>