bonjour!
je veu une foction qui renvoie un nombre aleatoire de type float ou double.
et merci.
Version imprimable
bonjour!
je veu une foction qui renvoie un nombre aleatoire de type float ou double.
et merci.
merci.
je pense que les boost.random peuvent me servir mais le problem j'arrive pas a comprendre comment l'utiliser dans mon programme c c possible un exemple?
Tu as jeté un oeil à la documentation officielle ?
http://www.boost.org/libs/random/
Si tu veux un float entre 0 et 1 ([0,1]) , tu peux toujours faire :
Maintenant tu peux facilement définir les bornes que tu souhaites en utilisant ce type de raisonnementCode:
1
2
3
4
5
6 /* Sur [0,1] */ float a = rand() / ( (float) RAND_MAX); //notation C /* Sur [0,1[ */ a = rand() / ( (float) RAND_MAX + 1.0f);
Ici, c'est le forum C++, pas le forum C.Citation:
j'arrive pas a comprendre comment l'utiliser dans mon programme c
merci millie c simple et efficace pour mon programme
ptetre jé pas bien bien compris ton raisonement pour des bornes[x,y]
mais je pense que ca merche avec ce code
// Sur [0,1]
float a = rand() / ( (float) RAND_MAX);
a=a*[y-x]+x;
En vérité, je pensais plutôt à ça (ce qui permet que ça ne dépend pas de l'écart entre a et b (sauf si ça dépasse RAND_MAX...) :
Code:
1
2
3
4
5
6 //entre deux entiers [a,b[ float f = rand() / ( (float) RAND_MAX + 1.0f); //f est un réel dans [0,1[ int e = rand() % (b-a) + a; //e est un entier sur [a,b-1] float g = e + f; //g est un réel sur [a,b[
man 3 rand dit
Ta manière de calculer e est donc déconseillée.Code:
1
2
3
4
5
6
7
8
9
10
11
12 « Si vous désirez engendrer un entier aléatoire entre 1 et 10, vous devez toujours procéder en utilisant les bits de poids forts, comme dans : j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0))); et jamais ainsi : j = 1 + (rand() % 10); (car cette dernière version utilise les bits de poids faibles). »
Ca dépend de l'implémentation de rand. J'ai donné une technique général, qui peut éventuellement être modifié suivant l'implémentation effective que tu utilises.
Après, si ton man te dit ça, pour ta machine, il vaut mieux faire ça ;)