Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2200 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  définition de rand()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

définition de rand()

n°937069
nathan_g
Posté le 04-01-2005 à 18:10:25  profilanswer
 

Bonjour,
 
Pour ma culture, j'aimerais savoir comment sont générés les nombres pseudo-aléatoires fournis par rand() en C++. J'ai essayé de chercher sur internet mais je n'ai rien trouvé de clair.
 
Est ce qu'il s'agit simplement d'une fonction du type :
 
u(n+1) = (a u(n) + b)% RAND_MAX
 
ou est ce plus compliqué (utilisation de plusieurs valeurs u(n), u(n-1) etc) ?
 
Merci d'avance de votre réponse,

mood
Publicité
Posté le 04-01-2005 à 18:10:25  profilanswer
 

n°937312
blurk
Posté le 04-01-2005 à 22:26:57  profilanswer
 

Dans les sources de la glibc :
val = ((state[0] * 1103515245) + 12345) & 0x7fffffff;

n°937463
nathan_g
Posté le 05-01-2005 à 08:25:15  profilanswer
 

Mouais, ça n'est pas très clair.
state[0] correspond à l'ancienne valeur retournée par rand() ? Dans ce cas, à quoi correspond l'opération & 0x7fffffff, une multiplcation, un modulo ?
 
D'autre part, j'ai l'impression que rand() doit utiliser plusieurs valeurs retournées précédemment. En effet, quand une même valeur est donnée plusieurs fois, la valeur retournée ensuite n'est pas la même.

n°937481
cricri_
Posté le 05-01-2005 à 09:06:01  profilanswer
 

& 0x7fffffff est un mask, ça doit être pour limiter la valeur, ou plutôt la rendre systématiquement posistive ...

n°949824
nathan_g
Posté le 10-01-2005 à 10:35:01  profilanswer
 

Bonjour,
 

n°949825
skeye
Posté le 10-01-2005 à 10:37:07  profilanswer
 


[:autobot]


---------------
Can't buy what I want because it's free -
n°949829
nathan_g
Posté le 10-01-2005 à 10:38:52  profilanswer
 

Oups, j'ai été trop rapide ...
 
Re-Bonjour,
 
J'aimerais essyé de voir dans les sources de gcc comment est programmé la génération de nombres aléatoires. Comment est ce que je peut m'orienter à partir du site de gcc :
 
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/
 
Est ce que qqn saurait comment trouver la définition de la méthode rand() ?
 
De même, si je cherche la défintion d'une autre fonction mathématique (ex : sin, cos, exp ...), est-il possible de savoir à partir de ce site comment elle est calculée par gcc ?
 
Merci d'avance de vos réponses !
 
Nathan
 

n°951136
Z3RgSp4wN
Posté le 11-01-2005 à 20:47:36  profilanswer
 

Pour la fonction rand() (chui pas sûr) mais je crois que c'est basé sur l'horloge systeme !? Lors de l'apel de la fonction il capture l'heure (les millisecondes) et il doit ensuite faire un traitement mathématique... :/ comment il génèrerer un nb aléatoire sinon ? Mais ce n'est qu'une supposition !

n°951188
++fab
victime du syndrome IH
Posté le 11-01-2005 à 21:45:42  profilanswer
 

Z3RgSp4wN a écrit :

Pour la fonction rand() (chui pas sûr) mais je crois que c'est basé sur l'horloge systeme !? Lors de l'apel de la fonction il capture l'heure (les millisecondes) et il doit ensuite faire un traitement mathématique... :/ comment il génèrerer un nb aléatoire sinon ? Mais ce n'est qu'une supposition !


 
la bonne façon d'utiliser rand() est d'appeler srand() avec une valeur tiré de l'horloge. rand() ne le fait pas tout seul. Une fois que rand() à une graine, il génère des nombres pseudo-aléatoires avec des algos compliqués utilisant les nombres magiques je crois. C'est au programme de maitrise de math pure ...
 
ça ressemble à que disais blurk :
"val = ((state[0] * 1103515245) + 12345) & 0x7fffffff;"

n°951190
blurk
Posté le 11-01-2005 à 21:48:59  profilanswer
 

gcc c'est le compilateur, rand (et autres...) est définie dans une bibliothèque comme la glibc, que tu peux trouver par ici : ftp://ftp.gnu.org/gnu/glibc/

mood
Publicité
Posté le 11-01-2005 à 21:48:59  profilanswer
 

n°951449
nathan_g
Posté le 12-01-2005 à 09:57:58  profilanswer
 

Ok, j'ai trouvé le fichier random_r.c qui doit être celui dont tu parlais blurk.
 
Est ce que le fait que j'utilise g++ comme compilateur change qqch dans la méthode utilisée pour générer des nombres aléatoires ? En fait, tel que je le comprends, cette librairie (glic) est une librairie de fonctions propres au C. En utilisant un compilateur C++, est ce que, néanmoins, je fais nécessairement appel à cette librairie où est que le compilateur g++ cherche une autre défintion de rand().
 
Ma question tiens principalement au fait que la fonction que j'ai trouvée dans glibc a pour en-tête "int __random_r ", mais je me suis peut être trompé dans ma recherche ?
 
Merci déja pour ces premières réponses.
 
Nathan


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  définition de rand()

 

Sujets relatifs
Problème syntaxique de définition de template pour une fonction membreErreur: "multiples definition" gcc
problème avec rand()[C] definition d'une liste chainee
kestion a la con definition du PHP?définition type ou structure procref
Définition d'une lvalue[C] définition d'une structure dynamique
Glossaire - Création de liens nom -> définition[Assembleur] Problème de définition de variable ?
Plus de sujets relatifs à : définition de rand()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR