Question

Je voudrais savoir si, dans des bibliothèques C ++ standard est-il un nombre distribution gaussienne générateur, ou si vous avez un extrait de code pour passer.

Merci d'avance.

Était-ce utile?

La solution

La bibliothèque standard ne fonctionne pas. Boost.Random fait, cependant. Je l'utilise que si je vous étais.

Autres conseils

C ++ Rapport technique 1 ajoute le support pour la génération de nombres aléatoires. Donc, si vous utilisez un compilateur relativement récent (c ++ 2008 visuelle GCC 4.3), il est probable qu'il est disponible hors de la boîte.

Voir pour l'utilisation de l'échantillon de std::tr1::normal_distribution (et beaucoup d'autres).

Les bibliothèques GNU Scientific a cette fonctionnalité. GSL - gaussienne de distribution

La réponse à cette question change avec C ++ 11 qui a l'en-tête aléatoire qui comprend std :: normal_distribution . Le papier de Walter Brown N3551, génération de nombres aléatoires en C ++ 11 est probablement l'un des meilleurs introductions à cette bibliothèque.

Le code suivant montre comment utiliser cet en-tête ( voir vivre ) :

#include <iostream>
#include <iomanip>
#include <map>
#include <random>

int main()
{
    std::random_device rd;

    std::mt19937 e2(rd());

    std::normal_distribution<> dist(2, 2);

    std::map<int, int> hist;
    for (int n = 0; n < 10000; ++n) {
        ++hist[std::floor(dist(e2))];
    }

    for (auto p : hist) {
        std::cout << std::fixed << std::setprecision(1) << std::setw(2)
                  << p.first << ' ' << std::string(p.second/200, '*') << '\n';
    }
}

Je donne une série d'exemples de génération de nombres aléatoires plus générale en C ++ 11 dans ma réponse à C ++ génération de nombres aléatoires float avec un exemple en utilisant Boost et rand() ainsi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top