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 :

aide valeur aleatoire changeant chaque milliseconde


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Par défaut aide valeur aleatoire changeant chaque milliseconde
    bonjour voila j'ai un souci, je suis en train de faire un jeu , un rpg , et je crée une valeur aleatoire a partir de time.h et de rand() car je ne connais que ça , hors a chaque boucle je teste si rand() et inferieure a 5 sur 1000 posibilité.
    hors avec rand la valeur aleatoire ne change que chaque seconde donc je ne sais pas comment faire , connaitriez vous une methode que je pourrais appliquer ?
    merci par avance, et merci pour tous les aides que vous m'avez deja apporter .
    merci a tous .

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    hors avec rand la valeur aleatoire ne change que chaque seconde donc je ne sais pas comment faire
    Heu, ça me semble vraiment suspect...

    http://c.developpez.com/faq/c/?page=..._random_bornes

    Il ne faut pas oublier d'utiliser srand pour initialiser le générateur.

    A noter que rand n'est pas multithread safe.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Par défaut
    ne t'inquiete pas je l'initalise mais il prend le nombre de seconde depuis 1970 hors les secondes ben sa change que chaque seconde hors moi je voudrais qu'il me crée une nouvelle valeur aleatoire toute les 30ms bref a chaque boucle .
    ps : peut tu m'expliquer ce que signifie multithread safe . ca veut dire que ce n'est pas sûre qu'il fonctionnera normalement en multithread . je veux bien utiliser autre chose mais quoi ? en tout cas merci de m'aider

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Par défaut
    je viens de lire mais moi il est deja initialisé puisqu'il change mais que chaque seconde et le second truc qui consiste a ajouter une valeur ne me va pas car si le premier nombre est au dessus de 5 tout les autres le seront .bof

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Dia,

    Il ne faut initialiser le générateur q'une fois, généralement dans le programme principal.

    Ton problème vient du fait que tu le réinitialises à chaque appel de ta procédure.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Par défaut
    droggo le soucis ce n'est pas qu'il ne change pas , il change bien et je l'initialise bien une seule fois, le soucis c'est qu'il se base sur les secondes donc , il ne peut changer que a chaque seconde et moi ça ne me suffit pas , il me faudrait quelque chose qui change tout les 30 millisecondes voila !!!
    desolé droggo si je ne m'ete pas assez bien expliqué !

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par themulot
    il se base sur les secondes donc , il ne peut changer que a chaque seconde et moi ça ne me suffit pas
    Je ne sais pas trop qui est "il" dans cette phrase mais si j'ai bien compris alors non ce n'est pas le cas.
    A chaque appel de 'rand' un nouveau nombre (pseudo-)aléatoire est généré, ça n'a aucun rapport avec une quelconque histoire de temps.

    Pour en être convaincu il suffit d'essayer par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        std::srand( 0 );
        for( int i = 0; i < 10; ++i )
            std::cout << "Random number "<< i << ": " << std::rand() << std::endl;
    Et de constater que tous les nombres sont différents...

    MAT.

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Jio,
    Citation Envoyé par themulot
    droggo le soucis ce n'est pas qu'il ne change pas , il change bien et je l'initialise bien une seule fois, le soucis c'est qu'il se base sur les secondes donc , il ne peut changer que a chaque seconde et moi ça ne me suffit pas , il me faudrait quelque chose qui change tout les 30 millisecondes voila !!!
    desolé droggo si je ne m'ete pas assez bien expliqué !
    Tu m'étonnes beaucoup.

    Seule l'initialisation du générateur, avec le truc classique avec time, est sensible à l'heure, et là, effectivement, ça joue à la seconde.

    Ensuite, chaque appel à rand est totalement indépendant de l'heure du système (et c'est encore heureux).

    J'en conclus que ce que j'ai écrit précédemment est exact : ton initialisation est probablement faite dans la fonction dans laquelle tu utilises rand, et que par conséquent, tu réinitialises à chaque appel de la procédure.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Par défaut
    je vais essayer differemment alors mais non l'initialisation n'est pas dans la fonction qui apelle rand() mais dans le general je l'envoi en parametre , mais je vais essayer differement car je crois savoir d'ou vient le soucis.

  10. #10
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut cette fonction génère 100 nombres aléatoires par seconde

    void genererpleindenombres() {
    int t0 = time(NULL);
    int t1;
    int i;
    srand(t0);
    while(1) {
    do {
    t1 = time(NULL);
    } while(t1 == t0);
    t0 = t1;
    for (i = 0; i < 100; i++) {
    printf("%d ",rand());
    }
    putchar('\n');
    }
    }

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Jao,
    Citation Envoyé par acx01b
    salut cette fonction génère 100 nombres aléatoires par seconde

    void genererpleindenombres() {
    int t0 = time(NULL);
    int t1;
    int i;
    srand(t0);
    while(1) {
    do {
    t1 = time(NULL);
    } while(t1 == t0);
    t0 = t1;
    for (i = 0; i < 100; i++) {
    printf("%d ",rand());
    }
    putchar('\n');
    }
    }
    En sortant le srand de ta fonction tu pourras en générer beaucoup plus.

    Pourquoi toujours vouloir faire autrement que ce qui est recommandé ?

  12. #12
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    il y a un while(1), cette fonction ne s'arrête jamais...

  13. #13
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Hao,
    Citation Envoyé par acx01b
    il y a un while(1), cette fonction ne s'arrête jamais...
    Et ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/10/2008, 13h13
  2. Réponses: 6
    Dernier message: 25/03/2008, 16h13
  3. aide valeur sous paradox
    Par Rafix712002 dans le forum Paradox
    Réponses: 3
    Dernier message: 03/05/2007, 14h39
  4. probleme de valeur aleatoire
    Par skwi6 dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 16/11/2006, 12h18
  5. Generer valeur aleatoir entre -0.5 et 0.5
    Par sparrow dans le forum C
    Réponses: 14
    Dernier message: 13/02/2006, 19h37

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