IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Deux générateurs de nombres pseudo-aléatoires


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 80
    Points
    80
    Par défaut Deux générateurs de nombres pseudo-aléatoires
    Bonjour,

    Un générateur de nombres aléatoires doit être "initialisé" avec une graine. Ensuite, tout les nombres générés sont déterminés.

    Si on régénère des nombres en repartant de la même graine, la suite de nombres générée sera identique.

    A chaque graine est "associée" une suite déterminée.

    C'est ce côté déterministe qui m'intéresse.

    Dans un programme, j'ai besoin de deux générateurs de nombres pseudo-aléatoire déterministe.

    Lorsque l'utilisateur demande la génération d'un nombre au premier générateur, celui-ci doit lui générer le nombre pseudo-aléatoire suivant avec sa propre graine.

    Lorsque l'utilisateur demande la génération d'un nombre au deuxième générateur, ce dernier doit lui générer un nombre pseudo-aléatoire avec sa propre graine.

    Supposons deux générateurs :

    Générateur 1 (graine : 45) : 54 86 24 69 34 75 36 84 ...
    Générateur 2 (graine : 68) : 21 68 43 97 25 48 62 76 ...

    Si je demande 2 valeurs au premier générateur, puis 3 au second et enfin 4 au premier, je dois obtenir ceci : 54 86 21 68 43 24 69 34 75.

    J'aimerais mettre ce mécanisme en place.

    J'avais pensé à utiliser srand() et rand() de de la bibliothèque cstdlib mais je rencontre deux problèmes.

    Le générateur de nombre pseudo-aléatoire n'est pas implémenté partout de la même manière. Il m’aurait fallu avoir le code de ces fonctions pour les implémenter moi même dans mon programme.

    Mon autre problème, c'est que je crois qu'il n'est pas possible de posséder deux générateurs distincts. Il n'est pas possible de créer deux générateur possédant chacun le propre graine.

    J'aimerais savoir comment m'y prendre pour réussir à mettre mon mécanisme en place. Je n'ai pas réussi à trouver les sources de ces fonctions. Si vous pouviez me donner un fonction permettant de générer des suites déterministes de nombre plus ou moins aléatoires, j'en serais ravis.

    Merci beaucoup.

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Hello !

    Dans ce cas, tu peux utiliser une implémentation "maison" d'un algorithme de génération de nombres pseudos aléatoires. Tu trouveras une implémentation toute faite du Mersenne Twister (parfait pour toi si tu ne fais pas de la crypto) ici. Il suffit d'instancier deux générateurs avec une graine différente pour obtenir le résultat que tu cherches !
    Find me on github

  3. #3
    screetch
    Invité(e)
    Par défaut
    il y a ici: http://en.wikipedia.org/wiki/List_of...ber_generators
    beaucoup d'algos de "random", j'espère que tu y trouveras ton bonheur =)

  4. #4
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonjour,

    j'ai sûrement dû rater quelque chose dans ton problème mais à tout hasard je te fais part d'une solution qui me semble évidente :
    1. tu génères à l'avance une suite de nombres avec le générateur 1
    2. tu génères à l'avance une suite de nombres avec le générateur 2
    3. tu simules ce que tu souhaites faire en piochant dans les suites 1 et 2 générées.

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    boost::random (qui doit dans le futur devenir std::random) est parfait pour ce genre de choses.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/04/2011, 13h52
  2. générateur de nombre (pseudo)-aléatoire
    Par mangeclous dans le forum Mathématiques
    Réponses: 0
    Dernier message: 28/08/2009, 05h18
  3. générateur de nombres pseudo-aléatoire
    Par salseropom dans le forum C
    Réponses: 3
    Dernier message: 22/08/2006, 13h21
  4. Générateur de nombres pseudo-aléatoires
    Par gege2061 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 25/08/2005, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo