8
votes

Semences aléatoires au moment de l'exécution

Comment puis-je générer des nombres aléatoires différents à l'exécution?

J'ai essayé xxx

mais il semble me faire un nombre aléatoire à chaque démarrage du programme , mais pas sur chaque exécution de la fonction elle-même ...

J'essaie d'automatiser quelques tests avec des nombres aléatoires, des itérations aléatoires, un nombre d'éléments, etc., je pensais que je pouvais juste appeler < / p> xxx

au début de ma fonction de test et de ma bingo, mais apparemment pas.

Que voudriez-vous me suggérer de faire? >


0 commentaires

3 Réponses :


11
votes

Vous devez appeler SRAND une fois par exécution de programme. Calling Rand met à jour l'état interne du générateur de nombres aléatoires, alors appeler Srand réinitialise à nouveau l'état aléatoire. Si moins d'une seconde est passée, le temps sera le même et vous obtiendrez le même flux de nombres aléatoires.


0 commentaires

5
votes

SRAND est utilisé pour semer le générateur de nombres aléatoires. Le 's' signifie "graine". Cela s'appelle "ensemencement" parce que vous ne le faites qu'une fois: une fois qu'il est "planté", vous avez un flux à partir duquel vous pouvez appeler rand autant de fois que nécessaire. N'appelez pas srand au début de la fonction qui nécessite des nombres aléatoires. Appelez-le au début du programme .

Oui, c'est un hack. Mais c'est un hack avec une interface très bien documentée.


0 commentaires

12
votes

Srand ()

Comme d'autres ont mentionné. SRAND () GRAINES Le générateur de nombres aléatoires. Cela signifie fondamentalement qu'il définit le point de départ de la séquence de nombres aléatoires. Par conséquent, dans une demande réelle, vous voulez l'appeler une fois (généralement la première chose que vous faites dans la principale (juste après la définition des paramètres régionaux)). P>

int main()
{
    srand(time(0));

    // STUFF
}


1 commentaires

York Les tests que je fais avec ce n'est pas des tests unitaires vraiment ... c'est juste un test d'étranglement comme une information sur la manière de traiter généralement une vue d'ensemble ...