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 :

fonction random et srandom


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut fonction random et srandom
    Bonsoir,

    je viens vous demander de l'aide parce que je dois utiliser la fonction random et srandom dans un devoir mais j'ai un souci.
    La fonction srandom permet de définir une valeur de départ pour le random, et donc si on ne veut pas avoir les valeurs qui reviennent à intervalle régulier il faut faire appel à srandom avec des paramètres variables.
    Pour ma part je fais appel à time(0) et à getpid(), le problème est que je suis obligé de faire appel à usleep et à le configurer à 1000000us pour avoir des variables différentes. A quels autres paramètres variables est ce que je peux faire appel?

    Pour info mon programme est censé donner une suite de nombre, et donc je fais appel avec mon random à l'intérieur d'une boucle.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    L'intervalle "régulier" de random est supposé bien grand, donc généralement on fait juste un srand() en début de projet...

    Sinon, tu utilises d'autres algorithmes de génération de nombres pseudo-aléatoires, ou si tu es sous nux, tu peux carrément lire dans /dev/random (générateur pseudo-aléatoire de qualité cryptographique)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    le problème est que je fais une boucle du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (i < nbr)  // i est un "compteur" et nbr un nombre prédéfinis
    {
       random_func();
       i++;
    }
    et ma fonction random

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int     random_func()
    {
      int   compteur;
     
      compteur = 0;
      srandom(time(0) * getpid());
      usleep(1000000);
      return(random() % 19 - 9);
    }
    et lorsque j'affiche à chaque tour de boucle le résultat, je tombe toujours sur le même résultat.
    ex: si nbr est égale à 5, je vais tomber par exemple sur 3 3 3 3 3

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 274
    Points
    274
    Par défaut
    c'ezst bizarre car j'ai memoire pour un truc d'avoir faire un
    srand(time(0));

    puis dans rand() qui me donnait bien des nombres aléatoire, essaye de decouter ton programme, voir ce que ca fait sans multiplier dnas getpid, car c'est vraiment space.
    tu compile ton projet sur quel genre de systeme ? car en plus de memoire le code etait compatible linux, freebsd, mac os x, openbsd, sunos et je n'avais relever aucun probleme bizarre dans son utilisation.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    on tourne sous du FreeBSD
    maintenant je ne sais pas si c'est ma boucle qui merde ou pas
    j'ai beau tester et chercher, je n'ai pas trouvé d'où venait mon problème, du coup je suis obligé de temporisé entre chaque prise de valeur xD (c'est vraiment très crade )

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Il ne faut appeler srand() (ou équivalent comme srandom()) qu'une fois par programme, pas pour chaque génération de nombre.

    Allez, j'avais pondu quelque chose: http://www.bourguet.org/cpp/random.pdf
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    merci bcp

    tu avais bel et bien raison, il ne faut appeller srandom qu'une seule fois xD

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 274
    Points
    274
    Par défaut
    a oui il etait tard hier donc je n'avais pas fait attention a cela, j'etais fatigue

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

Discussions similaires

  1. [Forth] Fonction random
    Par kamfezz dans le forum Autres langages
    Réponses: 3
    Dernier message: 16/04/2023, 14h33
  2. [Fortran 77] Fonction random
    Par ajsd0208 dans le forum Fortran
    Réponses: 1
    Dernier message: 15/07/2005, 12h58
  3. [LG]Utilisation de la fonction Random
    Par chloe95 dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2005, 14h20
  4. [LG]Fonction random
    Par platoon5 dans le forum Langage
    Réponses: 16
    Dernier message: 22/02/2005, 20h47
  5. Fonction Random en Assembleur
    Par chidi dans le forum Assembleur
    Réponses: 5
    Dernier message: 21/05/2004, 10h16

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