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

  FORUM HardWare.fr
  Programmation
  C

  Pb génération nb Aléatoires en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb génération nb Aléatoires en C

n°934586
El tourist​o
Posté le 31-12-2004 à 12:24:07  profilanswer
 

salut !!
je voudrai générer un nb aléatoire entre [0;1[ en utilisant drand48()..Je compile sous cygwin (gcc). A chaque fois j'obtient le meme nb : 0.000000
Qqun peut m'expliquer pkoi et comment bien généré mes nb ??
 
merci

mood
Publicité
Posté le 31-12-2004 à 12:24:07  profilanswer
 

n°934617
TotalRecal​l
Posté le 31-12-2004 à 13:14:33  profilanswer
 

elles sont pas dépréciées les fonctions qqchrand48 ?


---------------
Topic .Net - C# @ Prog
n°934623
Lam's
Profil: bas.
Posté le 31-12-2004 à 13:20:20  profilanswer
 

Elles le sont, et en plus, elles marchent mal sous cygwin...
 
Il faut utiliser un bon rand() des familles, ou un générateur plus aléatoire.

n°934640
rolphin
Posté le 31-12-2004 à 13:58:19  profilanswer
 

Il faut surtout penser à changer la graine d'initialisation à chaque utilisation...

n°934647
El tourist​o
Posté le 31-12-2004 à 14:24:06  profilanswer
 

Lam's a écrit :

Elles le sont, et en plus, elles marchent mal sous cygwin...
 
Il faut utiliser un bon rand() des familles, ou un générateur plus aléatoire.


 
J'ai essayé rand(), mais j'obtient uniquement des entiers.. j'ai essayé de bidouiller comme ca:
 
     float alea;
     srand((float)time(NULL));  
     alea=(float)rand();
     alea=(alea%1);  
mais ca marche pas ...  
Sinon qd je compile a la FAC (sous unix) ca marche bien drand48() .. et d'apres ce ke j'ai lu drand48 est un tres bon générateur aléatoire...
De plus je connais qqun chez ki drand48 marche bien sous cygwin.. peut etre faut il ke je mette un nouveau stdlib.c et .h ds mon cygwin(une version ki gere bien le drand48) ??? ..
 
D'autre idées ??

n°934686
hoty
Posté le 31-12-2004 à 15:58:57  profilanswer
 

Essaye :
 

Code :
  1. float alea;
  2. srand ( time(NULL) );
  3. alea = ((float)rand()) / RAND_MAX;


 
mais comme dit Lam's, tu devrais chercher qqc de plus
aleatoire (et avec une plage plus grande).


---------------
http://www.ikimegon.com/
n°934688
nraynaud
lol
Posté le 31-12-2004 à 16:10:50  profilanswer
 

attention, il y a une faute dans ton pseudo !

n°934890
El tourist​o
Posté le 01-01-2005 à 16:54:44  profilanswer
 

hoty a écrit :

Essaye :
 

Code :
  1. float alea;
  2. srand ( time(NULL) );
  3. alea = ((float)rand()) / RAND_MAX;


 
mais comme dit Lam's, tu devrais chercher qqc de plus
aleatoire (et avec une plage plus grande).


n°934891
El tourist​o
Posté le 01-01-2005 à 16:56:14  profilanswer
 

hoty a écrit :

Essaye :
 

Code :
  1. float alea;
  2. srand ( time(NULL) );
  3. alea = ((float)rand()) / RAND_MAX;


 
mais comme dit Lam's, tu devrais chercher qqc de plus
aleatoire (et avec une plage plus grande).


 
oupssss erreur de manip..Bonne année !!!
 
Merci .. ton code fonctionne .. mais qu'est ce que tu entends par une "plage plus gde" ?? et comment trouver qq chose de plus aléatoire que rand() ???
 

n°934932
Taz
bisounours-codeur
Posté le 01-01-2005 à 18:58:59  profilanswer
 
mood
Publicité
Posté le 01-01-2005 à 18:58:59  profilanswer
 

n°935097
hoty
Posté le 02-01-2005 à 07:26:53  profilanswer
 

El touristo a écrit :

Merci .. ton code fonctionne .. mais qu'est ce que tu entends par une "plage plus gde" ?? et comment trouver qq chose de plus aléatoire que rand() ???


 
RAND_MAX vaut en general 32767. Sur ton intervalle 0,1 ca fait des pas de 30.5E-6. Meme avec le code de Taz tu ne peux avoir que 32767 valeurs differentes.
 
Regarde ici : http://www.math.sci.hiroshima-u.ac [...] 937ar.html
 
En utilisant genrand_res53 tu va avoir un pas de 1.1E-16. De plus ce generateur a une periode de 2^19937-1. Au mieux, rand doit avoir une periode de 2^32.


---------------
http://www.ikimegon.com/
n°935123
Taz
bisounours-codeur
Posté le 02-01-2005 à 10:51:07  profilanswer
 

le problème ce n'est pas le code, c'est de savoir si on veut être portable

n°935181
blackgodde​ss
vive le troll !
Posté le 02-01-2005 à 15:00:00  profilanswer
 

a ce sujet, est-ce envisageable d'utiliser plusieurs fois rand() pour générer un seul nombre aléatoire "plus aléatoire ?" en utilisant rand() * rand() ou ((double)rand())/((double)rand()) par exemple ?
 


---------------
-( BlackGoddess )-
n°935204
Taz
bisounours-codeur
Posté le 02-01-2005 à 15:50:38  profilanswer
 

non, vu que x(i+1) est fonction de x(i)

n°935205
hoty
Posté le 02-01-2005 à 15:51:30  profilanswer
 

BlackGoddess a écrit :

a ce sujet, est-ce envisageable d'utiliser plusieurs fois rand() pour générer un seul nombre aléatoire "plus aléatoire ?" en utilisant rand() * rand() ou ((double)rand())/((double)rand()) par exemple ?


 
On va peut etre diviser la taille du pas par deux, mais a priori ca devrait aussi diviser la periode par deux (vu qu'on fait deux tirages a chaque fois).
 
Quand a la portabilite, c'est une question de choix et de point de vue : moi je mettrais le source de mt19937 dans le projet.

n°935209
thermoclin​e
Geek intelligent
Posté le 02-01-2005 à 15:55:29  profilanswer
 

ca veut dire quoi plus aleatoire?
Ca sent la complication pour rien du tout a plein nez (ex: rand * rand peut valoir 2e31 * 2e31...)
Il y a des algos qui marchent tres bien, qui sont portables et surs (Mersenne Twister ici present en est un tres bon exemple)
 
Et au moins on sait ce qui se passe.

n°935488
Lam's
Profil: bas.
Posté le 03-01-2005 à 06:17:39  profilanswer
 

thermocline a écrit :


Et au moins on sait ce qui se passe.


Exactement, et c'est pas très cool pour un algo de tirage aléatoire.  
 
Si la Française des jeux décide d'informatiser son tintouin et d'utiliser un pauvre Rand() pour tirer les nombres du Loto, tu peux être sûr que dès le lendemain, il y a une bonne centaine d'informaticiens millionnaires.
 
Bref, pour avoir des choses un peu plus aléatoires, il y a /dev/random (avec EGD si besoin est: http://egd.sourceforge.net/).  
Pour des petits tirages, j'ai tendance à foutre plusieurs nombres aléatoires dans un tableau puis à faire un shuffle. Ca marche aussi :).
 


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

  Pb génération nb Aléatoires en C

 

Sujets relatifs
[java] génération automatique des "import" ?[PHP] Génération d'email
generation de requetes sql a partir du code[JSP] Génération d'un arbre en JSP/HTML
AndroMDA generation JAVA[Flash] Génération dynamique de bouton.... (Hard)
[Divers] génération de statistique sur divers intervalsGénération de documentation de code C++
Images aléatoiresimages aléatoires
Plus de sujets relatifs à : Pb génération nb Aléatoires en C


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