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 :

Génération aléatoire (random) de nombre entre 1 et 2


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Génération aléatoire (random) de nombre entre 1 et 2
    Bonjour je débute en C/C++

    Je veux générer un chiffre aléatoire entre 1 et 2, j'utilise donc la formule suivante.
    Sauf que a chaque fois c'est le chiffre 2 qui sort !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main()
    {
    int randEq=0;
    int MAXrandEq = 2, MINrandEq = 1;
    randEq = (rand() % (MAXrandEq - MINrandEq + 1)) + MINrandEq;
    cout << randEq;
     
    }

    Sinon j'ai plein d'autres questions mais pour l'instant c'est le problème majeur

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ta formule est tout à fait bonne, le seul "problème" est qu'en fait avec ce programme, tu ne fais que tirer encore et encore le même nombre aléatoire avec rand(), d'où à chaque fois 2.
    Il te faut fixer une "graine" différente, et ceci pour chaque exécution avec la fonction srand().
    Je te conseille la lecture de ce tutoriel (le code du paragraphe III est ce que tu fais).

  3. #3
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 594
    Points
    594
    Par défaut
    Alors, il y a deux problèmes:

    1. Il te manque la graine pour initialiser ta génération aléatoire, sinon tu génèrera toujours le même nombre. Il faut donc faire un appel à stand() du genre
    2. Tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    randEq = (rand() % (MAXrandEq - MINrandEq + 1)) + MINrandEq;
    avec MAXrandEq = 2 et MINrandEq = 1, ça reviens donc à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    randEq = rand() % 2 + 1;
    Donc tu n'as que deux possibilités:
    a. randEq = 0 + 1 = 1
    b. randEq = 1 + 1 = 2

    T'es tombé dans le cas b.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 401
    Points : 23 783
    Points
    23 783
    Par défaut
    Et pour être tout-à-fait exhaustif, il faudrait parler du biais potentiellement introduit par un usage naïf du modulo, qui amène à représenter plus souvent certaines valeurs que d'autres, spécialement lorsque l'ensemble de sortie ne contient que quelques valeurs.

    Mais ce n'est pas gênant pour le moment…

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    D'un autre côté, quand le résultat de rand() est uniformément distribué entre 0 et RAND_MAX, le biais est faible, non? Surtout quand RAND_MAX est grand (sur bcp de machines 32 bits il est à 2^31-1)

    À moins que j'aie mal compris, le biais signifie que sur RAND_MAX tirages, (RAND_MAX % nombre_de_valeurs) valeurs apparaîtront une fois de plus que les autres.

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/11/2012, 13h56
  2. Réponses: 6
    Dernier message: 11/10/2011, 17h23
  3. Générer nombre aléatoirement-Random
    Par Pepson dans le forum C
    Réponses: 2
    Dernier message: 01/01/2009, 20h19
  4. nombre aléatoire, random
    Par Invité dans le forum Caml
    Réponses: 2
    Dernier message: 10/07/2007, 09h39
  5. Tirage aléatoire d'un nombre entre 0 et 100
    Par parano dans le forum C++
    Réponses: 7
    Dernier message: 05/03/2007, 14h17

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