Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:


+ Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 15 sur 24

Générer un entier aléatoire en C++

  1. LicenceXP

    Date d'inscription
    juillet 2005
    Localisation
    Bruxelles
    Âge
    25
    Messages
    945

    Générer un entier aléatoire en C++

    Bonjour, c'est encore moi !

    Je cherche aujourd'hui à pouvoir générer un entier aléatoire compris entre 1 et 100 : comment faire ?
     


    • Publicité




      Poursuivez votre recherche
      Recherche personnalisée

  2. erik

    Date d'inscription
    août 2004
    Messages
    3 097

    Re : Générer un entier aléatoire en C++

    Utilise la fonction rand()
     

  3. invité576543

    Date d'inscription
    janvier 1970
    Messages
    0

    Re : Générer un entier aléatoire en C++

    Bonjour,

    Pas très précise la question!

    En utilisant des fonctions de génération aléatoire disponibles en bibliothèque?

    A partir des fonctions de base?

    Pseudo-aléatoire, ou "vrai" aléatoire?

    Qualité recherchée?

    ...

    Cordialement,
     

  4. Pole

    Date d'inscription
    juin 2005
    Localisation
    Sur terre, mais parfois dans la Lune.
    Âge
    19
    Messages
    481

    Re : Générer un entier aléatoire en C++

    Simplement 1+rand()%99
    Mais si tu veux une vraie répartition, il vaut mieux 1+(int)((float)rand()/32767*99)

    Pole.
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.
     

  5. LicenceXP

    Date d'inscription
    juillet 2005
    Localisation
    Bruxelles
    Âge
    25
    Messages
    945

    Re : Générer un entier aléatoire en C++

    Ma question n'est pas précise parce que je ne m'y connais pas

    Pour résumer j'ai besoin de générer des entiers le plus aléatoirement possible compris entre 1 et 100... Je ne m'y connais pas assez pour pouvoir dire autre chose

    Je vais essayer la formule de 1+(int)((float)rand()/32767*99)

    Même si le 32767 est une énigme pour moi
     

  6. invité576543

    Date d'inscription
    janvier 1970
    Messages
    0

    Re : Générer un entier aléatoire en C++

    Citation Envoyé par Pole Voir le message
    Mais si tu veux une vraie répartition, il vaut mieux 1+(int)((float)rand()/32767*99)
    Hmm... pas évident que ça change grand chose.

    Si on dispose d'un tirage garanti uniforme sur 0..32767, et que l'on veut en tirer un tirage sur 0..99 parfaitement uniforme, une méthode simple consiste à

    - tirer un nombre n dans 0..32767 jusqu'à ce que n<32700
    - prendre le reste de n divisé par 100

    Cordialement,
     


    • Publicité



  7. invité576543

    Date d'inscription
    janvier 1970
    Messages
    0

    Re : Générer un entier aléatoire en C++

    Citation Envoyé par LicenceXP Voir le message
    Même si le 32767 est une énigme pour moi
    215 - 1

    Pole prend en compte les propriétés fine du générateur sous-jacent, et suppose que le résultat interne est sur 16 bit signé.

    Le principe général est correct, si on veut être très précis (par exemple obtenir une répartition vraiment uniforme, et qu'on utilise rand(), il faut prendre en compte les propriétés fines de rand().

    Mais si quelque chose d'un peu approximatif est suffisant, pas besoin de se casser la tête, la première formule de Pole suffit...

    Cordialement,
     

  8. LicenceXP

    Date d'inscription
    juillet 2005
    Localisation
    Bruxelles
    Âge
    25
    Messages
    945

    Re : Générer un entier aléatoire en C++

    J'aimerai que chaque nombre, si je décide d'en faire apparaitre 15 par exemple, ait une probabilité égale de sortir, quelle code me conseillez-vous ?
     

  9. invité576543

    Date d'inscription
    janvier 1970
    Messages
    0

    Re : Générer un entier aléatoire en C++

    Citation Envoyé par LicenceXP Voir le message
    J'aimerai que chaque nombre, si je décide d'en faire apparaitre 15 par exemple, ait une probabilité égale de sortir, quelle code me conseillez-vous ?
    Si une précision telle que la proba de chaque nombre est 0.01 +/- 0.00002 (au pire, si ça se trouve rand() est meilleure que ça) te suffit, la première formule de Pole est suffisante.

    Cordialement,
     

  10. LicenceXP

    Date d'inscription
    juillet 2005
    Localisation
    Bruxelles
    Âge
    25
    Messages
    945

    Re : Générer un entier aléatoire en C++

    Ce sera suffisant oui

    Comme vous me parlez de pseudo-aléatoire, je m'inquiète quand même d'une chose : si l'ordinateur est chargé de sortir des nombres compris entre 1 et 100 durant toute la journée, est-il possible que dans la suite ininterrompue de ces nombres ait des structures internes ? Autrement dit qu'après deux heures, ce soient exactement les mêmes nombres aléatoires qui ressortent ?
     


    • Publicité



  11. Pole

    Date d'inscription
    juin 2005
    Localisation
    Sur terre, mais parfois dans la Lune.
    Âge
    19
    Messages
    481

    Re : Générer un entier aléatoire en C++

    Le 2ème.

    Pourquoi 32767? Tout simplement parce que rand() donne un nombre pseudo-aléatoire entre 0 et 32767. Si on le divise, on a un nombre entre 0 et 1, on le multiplie par 99 : entre 0 et 99, on ajoute 1 : entre 1 et 100.

    Pourquoi pas le 1er code?
    Prenons un exemple avec un rand() qui tire un nombre entre 0 et 10.
    Maintenant, on le met %4.
    Si c'est 0->0.
    1->1
    2->2
    3->3
    4->0
    5->1
    6->2
    7->3
    8->0
    9->1
    0 et 1 sont plus fréquent! 3 fois au lieu de 2 pour le reste.
    Maintenant, on divise par 10 et on multiplie par 4.
    0->0->0
    1->0.4->0
    2->0.8->0
    3->1.2->1
    4->1.6->1
    5->2->2
    6->2.4->2
    7->2.8->2
    8->3.2->3
    9->3.6->3

    Voilà, le plus est que les fréquences "bizarres" sont plus réparties alors qu'avec les %, elles se suivent.

    En fait c'est a peu près la même chose, mais le % est plus simple.

    Edit : Oui. La période doit être dans les 4 millards. (a mon avis très proche de 2^32)
    Sinon, fais ton générateur aléatoire. Exemple de site :
    http://www.apprendre-en-ligne.net/random/index.html . (je te conseille un générateur avec des congruences)

    Pole.
    Dernière modification par Pole ; 11/10/2006 à 13h42. Motif: Nouveaux messages
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.
     

  12. zoup1

    Date d'inscription
    juillet 2004
    Localisation
    Paris
    Âge
    47
    Messages
    3 766

    Re : Générer un entier aléatoire en C++

    Citation Envoyé par Pole Voir le message
    Pourquoi 32767? Tout simplement parce que rand() donne un nombre pseudo-aléatoire entre 0 et 32767.

    En fait rand() renvoie en nombre en 0 et MAX_RAND il se trouve que généralement MAX_RAND vaut 32767 mais cd n'est pas forcement le cas dans toutes les implémentations du C/C++.

    Il vaut donc toujours mieux utiliser MAX_RAND au lieu de 32767.
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
     

  13. invité576543

    Date d'inscription
    janvier 1970
    Messages
    0

    Re : Générer un entier aléatoire en C++

    Citation Envoyé par Pole Voir le message
    Edit : Oui. La période doit être dans les 4 millards. (a mon avis très proche de 2^32)
    Bonjour,

    Sur quoi te bases-tu pour affirmer cela. En général, un générateur qui sort entre 0 et n a une période de l'ordre de n, pas de n²! Sinon, il tronque de lui-même sa précision, et on se demande bien à quoi ça rimerait...

    Cordialement,
     

  14. invité576543

    Date d'inscription
    janvier 1970
    Messages
    0

    Re : Générer un entier aléatoire en C++

    Citation Envoyé par Pole Voir le message
    Voilà, le plus est que les fréquences "bizarres" sont plus réparties alors qu'avec les %, elles se suivent.
    C'est un maigre progrès... La méthode que j'ai indiquée permet d'obtenir des fréquences exactement égales...

    Cordialement,
     


    • Publicité



  15. Faith

    Date d'inscription
    décembre 2004
    Localisation
    Paris
    Âge
    32
    Messages
    7 775

    Re : Générer un entier aléatoire en C++

    Citation Envoyé par LicenceXP Voir le message
    Comme vous me parlez de pseudo-aléatoire, je m'inquiète quand même d'une chose : si l'ordinateur est chargé de sortir des nombres compris entre 1 et 100 durant toute la journée, est-il possible que dans la suite ininterrompue de ces nombres ait des structures internes ? Autrement dit qu'après deux heures, ce soient exactement les mêmes nombres aléatoires qui ressortent ?
    Non: pseudo aléatoire veut juste dire qu'avec une même initialisation, la suite des nombres sera la même.

    Celà me permet d'ailleurs de te rappeler d'initialiser le générateur de nombres aléatoires pour éviter d'avoir toujours la même réponse à chaque lancement de programme.
    Au début du programme, utilise donc:
    Code:
    srand(time(NULL));
    (ou autre chose du même genre)
     


Poursuivez votre recherche :




Sur le même thème :




 

Discussions similaires

  1. entier
    Par sahdow dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 02/02/2007, 14h05
  2. Entier infini ?
    Par Rhizomatique dans le forum Mathématiques du supérieur
    Réponses: 82
    Dernier message: 14/12/2006, 21h01
  3. Entier naturel
    Par MagStellon dans le forum Mathématiques du collège et du lycée
    Réponses: 25
    Dernier message: 07/11/2006, 00h56
  4. entier de gauss
    Par christophe_de_Berlin dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 21/06/2006, 09h26
  5. tv du monde entier
    Par riccheca19 dans le forum Dépannage
    Réponses: 6
    Dernier message: 27/04/2004, 20h11


Les tags pour cette discussion