60 votes

Comment générer un double aléatoire distribué uniformément entre 0 et 1 à partir de C ++?

Comment générer un double aléatoire distribué uniformément entre 0 et 1 à partir de C ++?

Bien sûr, je peux penser à quelques réponses, mais j'aimerais savoir quelle est la pratique courante, avoir:

  • Bonne conformité aux normes
  • Bon hasard
  • Bonne vitesse

(la vitesse est plus importante que le hasard pour mon application).

Merci beaucoup!

PS: Dans ce cas, mes plates-formes cibles sont Linux et Windows.

55voto

Elemental Points 4997

Une solution old school comme:

 double X=((double)rand()/(double)RAND_MAX);
 

Devrait répondre à tous vos critères (portable, standard et rapide). évidemment, le nombre aléatoire généré doit être ensemencé. La procédure standard ressemble à ceci:

 srand((unsigned)time(NULL));
 

6voto

Vijay Mathew Points 17155

La classe random_real de la bibliothèque aléatoire Boost est ce dont vous avez besoin.

5voto

John D. Cook Points 19036

Voici comment procéder si vous utilisiez C ++ TR1 .

3voto

suszterpatt Points 5172

Si la vitesse est votre principale préoccupation, alors je voudrais simplement aller avec

 double r = (double)rand() / (double)RAND_MAX;
 

-1voto

Ryan Points 376

Vous pouvez essayer l'algorithme Mersenne Twister.

http://en.wikipedia.org/wiki/Mersenne%5Ftwister

Il combine bien la vitesse et le hasard, et une implémentation de la GPL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X