Je suis en train d'utiliser les C++ STD TechnicalReport1 extensions pour générer des nombres après une distribution normale, mais ce code (adapté de this article):C++ TR1: comment utiliser la distribution normale?
mt19937 eng;
eng.seed(SEED);
normal_distribution<double> dist;
// XXX if I use the one below it exits the for loop
// uniform_int<int> dist(1, 52);
for (unsigned int i = 0; i < 1000; ++i) {
cout << "Generating " << i << "-th value" << endl;
cout << dist(eng) << endl;
}
imprime seulement 1 "Génération ..." message du journal , puis ne quitte jamais la boucle for! Si j'utilise la distribution, je la commente à la place, elle se termine, alors je me demande ce que je fais de mal. Une idée?
Merci beaucoup!
merci l'homme, cela fonctionne comme un charme, mais je me demande pourquoi avec ce moteur cela fonctionne, et pas avec l'autre .. – puccio
Évidemment, la seule différence est votre utilisation du mt19937 générateur de nombres alors que Jagannath utilise le std :: tr1 :: ranlux64_base_01. Logiquement, je suppose que le bug peut être dans votre implémentation de l'objet mt19937 (algo dont je n'avais jamais entendu parler avant vous, merci pour cela :-)) qui ne fait pas partie de std library. –
Est-il possible de vectoriser une telle boucle pour dessiner des nombres aléatoires? Je rappelle que vous ne pouvez pas vectoriser une boucle qui a un appel de fonction. – Lindon