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

Algorithmes et structures de données Discussion :

Algorithme de la fonction rand()


Sujet :

Algorithmes et structures de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Points : 160
    Points
    160
    Par défaut Algorithme de la fonction rand()
    Bonjour,
    je cherche des informations sur les implémentations actuelles de la fonction rand() du langage c, sous linux et windows...
    En particulier, existe t-il un moyen, en connaissant les n dernières valeurs retournées par la fonction rand, de trouver la prochaine valeur qui sera retournée?

    Merci de votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 549
    Points : 556
    Points
    556
    Par défaut
    je crois que la fonction rand() utilise comme point de départ, l'heure du PC avec une précision allant au millième de secondes ou plus

    Après, je crois que c'est une sorte de polynome de degré 4 ou 5 qui donne le caractère aléatoire

    ==> non je ne pense pas que tu puisses trouver la valeur retrouné à moins d'avoir la formule exacte et de lancer ton programme juste dans le bon timing

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Points : 160
    Points
    160
    Par défaut
    Je ne crois pas que tu ais raison, vu que quand je lance 2 fois un programme qui affiche un nombre avec rand(), il donne la même valeur

    C'est la fonction srand qui peut être utilisée pour initialiser le générateur de nombres pseudo aléatoires avec la date courante par exemple.

    Ce que je cherche moi c'est des informations sur la fonction rand elle meme...

  4. #4
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Voici l'algo tiré du K&R :

    #define RAND_MAX 32767 /* (2**15 - 1) */

    SEED = (1103515245*SEED + 12345) mod 2**15
    X = SEED
    Returns integer in range [0, RAND_MAX]


    La valeur de départ de seed est toujours la même, mais on peut la changer avec srand().

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Points : 160
    Points
    160
    Par défaut
    Merci pour cette réponse...
    J'aurais sans doute du etre plus précis dans ma question :p
    J'ai lu effectivement quelque part que ce générateur avait été utilisé, mais il me semble que ce n'est plus le cas aujourd'hui sous linux... sous windows je n'ai aucune information

    C'est pour ça que je demandais si vous aviez des renseignements sur les implémentations actuelles de la fonction rand, sous linux et windows

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    "Sous Linux" "sous Windows" ne signifie rien à ce niveau, c'est l'implémentation de cette fonction faite par les concepteurs du compilateur qui compte.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  7. #7
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Par exemple sous windows, VC2005 donne le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MOV ECX,DWORD PTR DS:[Seed]
    IMUL ECX,ECX,343FD
    ADD ECX,269EC3
    MOV DWORD PTR DS:[Seed],ECX
    MOV EAX,ECX
    SHR EAX,10
    AND EAX,7FFF
    RETN
    Et avec MinGW, le code fait appel à la même fonction de la bibliothèque msvcrt.dll.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Points : 160
    Points
    160
    Par défaut
    Merci beaucoup pour les réponses...
    je vais essayer de comprendre ce code assembleur alors :p
    Pour linux j'ai trouvé le code de la libc utilisée par gcc, donc j'ai ma réponse aussi.

  9. #9
    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
    Points : 9 818
    Points
    9 818
    Je ne répondrai à aucune question technique en privé

  10. #10
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    La méthode utilisée est celle des suites de Lehmer. Il en existe d'autres comme le middle-square de Von Neumann et la méthode dite HP. L'algo de Lehmer (voir Wiki) est intéressant car il fournit des suites récurrentes equi-distribuées extrêmement simples. C'est donc cette méthode qui est généralement choisie par les auteurs de langages pour générer des suites 'pseudo-aléatoires' puisqu'on ne sait pas créer le 'vrai' hasard. Si on peut finir par une touche philo, la notion de 'hasard' ne mesure que notre ignorance d'un processus. Pour le créateur pas de hasard, tout est planifié et se déroule selon LE programme, sauf s'il y a des bugs ...
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  11. #11
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Citation Envoyé par Zavonen
    Si on peut finir par une touche philo, la notion de 'hasard' ne mesure que notre ignorance d'un processus.
    Ca commence mal question philo...
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  12. #12
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Citation Envoyé par Zavonen
    [...]la notion de 'hasard' ne mesure que notre ignorance d'un processus. Pour le créateur pas de hasard, tout est planifié et se déroule selon LE programme[...]
    Oh oui, un débat sur la mécanique quantique !

  13. #13
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795

Discussions similaires

  1. la fonction rand()
    Par bonomsoleil dans le forum C
    Réponses: 10
    Dernier message: 16/11/2006, 22h43
  2. [Mail] valider par mail un formulaire et fonction rand
    Par guillaume2vo dans le forum Langage
    Réponses: 2
    Dernier message: 17/09/2006, 20h37
  3. fonction rand() sur liste ?
    Par debutant-1 dans le forum C
    Réponses: 10
    Dernier message: 24/05/2006, 10h58
  4. Algo de la fonction RAND
    Par booby dans le forum C
    Réponses: 3
    Dernier message: 21/04/2006, 14h25
  5. fonction rand() php
    Par taka10 dans le forum Langage
    Réponses: 5
    Dernier message: 12/04/2006, 13h35

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