J'aimerais savoir si dans les bibliothèques standard C ++ Il y a une Générateur de numéros gaussiennes Strort>, ou si vous avez un extrait de code à passer. P>
Merci d'avance. P>
4 Réponses :
La bibliothèque standard ne le fait pas. Boost.Random fait cependant. J'utiliserais ça si j'étais toi. P>
Les bibliothèques scientifiques GNU ont cette fonctionnalité. GSL - Distribution gaussienne P>
Lol, j'ai écrit ça avant de regarder la réponse ... Je suppose que je devrais le changer :)
Rapport technique C ++ 1 ajoute la prise en charge de la génération de nombres aléatoires. Donc, si vous utilisez un compilateur relativement récent (Visual C ++ 2008 GCC 4.3), des chances sont qu'il est disponible hors de la boîte. p>
voir ici pour l'échantillon d'utilisation de std :: tr1 :: normale_distribution code> (et beaucoup d'autres). p>
Si ce n'est pas encore là, vous pouvez aussi le trouver dans le cadre de Boost aussi: boost.org/doc/libs/1_39_0/doc/html/boost_tr1/...
La réponse à cette question change avec C ++ 11 qui a le Random Header qui inclut std :: normal_distribution . Le papier de Walter Brown's N3551, génération de nombres aléatoires en C ++ 11 A > est probablement l'une des meilleures introductions à cette bibliothèque. Le code suivant montre comment utiliser cet en-tête ( Voir It Live em>) : P> #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';
}
}
Code CA L'extrait de code est disponible dans une similaire, une question ultérieure (cliquez ici) a >