Bonsoir,
Je me demandais comment générer un nombre réel entre 0 et 1 ?
J'utilisais toujours rand pour des entiers mais la pour des réels y a-t-il une autre fonction ? j'ai entendu parlé de random ?
Merci
++
Bonsoir,
Je me demandais comment générer un nombre réel entre 0 et 1 ?
J'utilisais toujours rand pour des entiers mais la pour des réels y a-t-il une autre fonction ? j'ai entendu parlé de random ?
Merci
++
Salut,
Comme il n'y a pas de type Réel en C (d'ailleurs, il n'y en a dans aucun langage (ce n'est toujours qu'une restriction, ce qui est normal)), je vais te donner une technique pour générer un "Réel" entre 0 et 1 suivant l'implémentation que tu as choisi.
Donc, on dispose d'une fonction alea qui permet de générer un entier entre 0 et n.
Par exemple celle obtenu dans la FAQ :
Il suffit de ramener la valeur entre 0 et n entre 0 et 1 par une homothétie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 int alea(int n) { int partSize = (n == RAND_MAX) ? 1 : 1 + (RAND_MAX - n)/(n+1); int maxUsefull = partSize * n + (partSize-1); int draw; do { draw = rand(); } while (draw > maxUsefull); return draw/partSize; }
Et on trouve donc : alea(n) / n (la division correspond à la division permis par ton objet).
La grandeur de n va changer la précision que tu auras, par exemple, si n = 10, tu auras une précision de 0.1 entre tes éléments. Il suffit donc d'ajuster pour avoir la précision que tu veux (n = 10^p pour une précision de 0.1^p).
Je ne vois pas trop le problème Si tu veux un nombre en 0 et 1 avec une précision de 0.1, il faut donc 10 valeurs de 0.0 à 0.9, soit (0 à 9) / 10. En quoi est-ce une difficulté ? La plage dépend de la précision désirée.. Pour 0.01 à 0.99, à l'évidence, il fait une plage de (0 à 99) / 100 etc. Je te laisse faire le calcul...Envoyé par italiasky
Rien de ceci n'a a voir avec le langage C. Simple problème d'arithmétique élémentaire... Le niveau de calcul est si bas que ça dons notre beau pays ?
C'est bon je ne suis pas bête non plus...Envoyé par Emmanuel Delahaye
Je savais très bien faire comme ca mais si j'ai demandé c'est parce que un ami m'a parlé de srandom et qu'il a fait comme ci-dessous et qu'on a bien des nombres réels entre 0 et 1 :
Et que je comprenais pas le RAND_MAX etc... vu qu'il n'est défini nul part !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 srandom(); random()/(float)RAND_MAX;
Bref voilà, c'est tout, je voulais juste savoir s'il y avait quelque chose de spécifique pour générer ce genre de nombre en C.
Et oui, même si je ne suis pas un génie en maths, je ne suis pas non plus un âne...![]()
Bonne journée...
C'est dans la norme.Envoyé par italiasky
http://www.open-std.org/jtc1/sc22/wg...docs/n1124.pdf
Sinon, il est bon d'avoir une documentation de référence...
K&R2 Page 257 : <stdlib.h>
Au fait, le C ne définit que srand() et rand(), mais ceci peut aider...
http://emmanuel-delahaye.developpez....d/inc/random.h
Partager