Un random spécial

Résolu
Bonjour, je crée un petit programme en C++ pour lequel j'ai besoin de générer des nombres aléatoirement. Pour cela, j'utilise
srand(time(NULL));
puis
(int)(rand()/(float)RAND_MAX * (max)+min)

pour les générer.
Mon problème est que le programme étant très petit, le premier nombre généré est toujours le même puisqu'il met le même temps pour s'exécuter à chaque fois.

J'ai rajouté un cin avec "Voulez-vous commencer?" pour temporiser le premier résultat mais ça n'a apparemment rien changé. Je suppose que le temps écoulé pendant l'attente de la réponse n'est pas pris en compte.

J'ai donc pensé à réaliser un random à partir du temps de l'ordinateur et non du temps d'exécution du programme mais je ne sais pas comment faire ni si cela résoudra mon problème.

1 réponse

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    "le premier nombre généré est toujours le même puisqu'il met le même temps pour s'exécuter à chaque fois."
    Ce n'est pas comme ça que ça fonctionne, c'est basé sur la valeur donné en paramètre de srand(unsigned int) qui dépend donc de l'heure à laquelle l'instruction time(NULL) a été exécuté, et pas au temps écoulé entre le srand() et le rand().

    Je pense que l'erreur est dans ton /(float)RAND_MAX
    Essaye plutôt : rand()%(max-min)+minLa confiance n'exclut pas le contrôle
    1. Ok, c'était peut-être un coup de malchance. Par contre, ta fonction diminue l'équilibre des chances du random, ce qui fait qu'un random de 1 à 2 retourne toujours 1.
    2. Modérateur
      Oui, comme j'ai fait c'est entre "min" inclus et "max" exclu, c'est souvent comme cela qu'on le présente (un peu comme l'histoire du 0 à n-1).
      Si tu veux faire entre "min" inclus et "max" inclus, il faut faire rand()%(max+1-min)+min
    3. Ok merci, je préfère parce que je me suis rendu compte que ma formule était bizarre voire mal faite. Ta dernière a l'air de bien fonctionner.

      Merci, j'ai un peu de mal à réfléchir un dimanche soir x)