J'ai besoin de générer des nombres aléatoires uniformes dans une boucle for. pour la boucle va pour les numéros de 1000000. Il y en a une autre pour boucle qui va à 2000 à l'intérieur. Donc, je génère 2 * 10^9 nombres aléatoires uniformes. J'utilise la méthode ci-dessous:Quelle est la méthode la plus rapide pour créer des nombres aléatoires uniformes en C++?
#include <random>
double zeta;
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
auto uniform_rand = bind(uniform_real_distribution<double>(0,1), mt19937(seed));
for(int j=0; j<1000000; j++)
for(int i=0; i<2000; i++)
zeta=-eta/2.0+uniform_rand()*eta; // in the range (-eta/2, +eta/2)
theta[i]+=zeta;
end
end
'std :: bind' a tendance à être surclassé par lambdas, à la fois en termes de lisibilité et de performance. – chris
C'est énormément de nombres aléatoires. Si vous en avez besoin de beaucoup, pourquoi ne pas le découper en threads pour utiliser plusieurs cœurs? – tadman
Désolé, je ne pouvais pas comprendre ce que vous voulez dire @tadman –