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

MFC Discussion :

Probleme de tirage avec rand ?


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Par défaut Probleme de tirage avec rand ?
    Salut,

    Dans un programme je suis souvent amené à tirer un nombre au hasard entre 0 et 1000. Pour cela j'utilise la fonction rand , au prealable j'ai utilisé srand l'initialisation.

    Or je me rend compte, qu'il y a des valeur qui ne doivent jamais etre tiré, car ces point ont pour but de calculer des positions sur des triangles, et lorsque je les affiches, je me rend compte que certaine position ne sont jamais tirees.

    vola comment j'utilise rand dans mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    a = (rand()%1000);
    b = (rand()%1000);
    c = (rand()%1000);
    J'ai cru comprendre qu'il y avait plusieur facon d'utiliser rand pour tirer une valeur entre deux bornes, et que selon la maniere choisi, les tirages ne presentés pas forcement les meme redondances.

    Qui peux m'eclairer ?

    merci

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Je n'ai pas trop compris la question, mais voila ce que je sais sur les tirages aléatoires :

    initialiser le générateur aléatoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    srand((unsigned) time(NULL));
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    srand(GetTickCount);
    Tirage entre 0 et max (non inclus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return (rand()*max)/(RAND_MAX+1);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return rand()%max;
    En espérant que ca puisse t'aider

    (Il paraitrait que les bits significatifs de tirage aléatoire soient les premiers et donc, par conséquent, la division est "plus aléatoire" que le modulo, personnelement, je n'ai pas vraiment remarqué la différence)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Par défaut
    Je vais déja éssayer voir si ca change qqe chose.

    Mon prob, vient du fait que certains chiffres semble être tiré plus souvent que d'autres.
    Il parait que suivan la facon dont on utilise rand, si on fait plusieur tirages et qu'on affiche les resultat, on peut remarque que l'une des methodes fait apapraitre plus de series de chiffres identique que l'autre.

    Il faut que je verifie cela

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Par défaut
    Bon ca change pas grand chose.
    rand ne semble pas avoir une distribution homogne. C'est a dire que tout les nombres n'ont pas le meme nombre de change d'etre tiré?

    Qq'un conait 'il une autre facon de tirer aleraoirement des nombres entre deux bornes, avec une distribution homogene ?

    Merci

  5. #5
    kor
    kor est déconnecté
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 46
    Par défaut
    rand est un générateur pseudo aléatoire ce qui signifie que la suite de chiffre dépends de l'initialisation. Et la génération est cyclique (ca peut prendre du temps).
    Il n'y a pas de chiffre privilégié.

    Ca dépend comment tu utilises le nombre généré.

  6. #6
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 106
    Par défaut
    Salut,
    oui la fonction rand est bien pourrie et tu ne pourras pas y faire grand chose.

    Tu peux jeter un coup d'oeil aux deux articles sur ce sujet sur CodeProject, tu as tout d'abord celui ci et celui là
    Je n'ai jamais utilisé ni l'un ni l'autre (j'ai même pas lu les articles) mais vu le sérieux de ce site tu vas surement trouver ton bonheur dans une de ces deux pages
    Bonne chance

Discussions similaires

  1. petit probleme avec rand()
    Par Asmod_D dans le forum C++
    Réponses: 3
    Dernier message: 17/09/2006, 13h03
  2. Réponses: 6
    Dernier message: 04/04/2003, 15h28
  3. [Kylix] Probleme de séparateur avec Kylix2 ?
    Par jeanphy dans le forum EDI
    Réponses: 4
    Dernier message: 10/02/2003, 16h41
  4. Réponses: 12
    Dernier message: 23/10/2002, 11h56
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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