Genere un nombre reel aleatoire en C
Fermé
wisse
-
2 juin 2009 à 17:32
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 20 mai 2014 à 13:40
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 20 mai 2014 à 13:40
Bonjour,
slt je cherche a genere un nombre aleatoire reel suiavnt la loi uniforme entre [0,1] en C ,
j essyer avec ca mais ca marche pas ( il affiche uniquement j=0):
float j;
srand(time(null));
j=rand()/RAND_MAX+1.0;
deja le mot RAND_MAX je sais pas ce que il veut dire ici . a ce que c juste l'instruction qui est comme ca ou c une valeur que je doit entree .
alors merci de bein vouloir m'aidé
slt je cherche a genere un nombre aleatoire reel suiavnt la loi uniforme entre [0,1] en C ,
j essyer avec ca mais ca marche pas ( il affiche uniquement j=0):
float j;
srand(time(null));
j=rand()/RAND_MAX+1.0;
deja le mot RAND_MAX je sais pas ce que il veut dire ici . a ce que c juste l'instruction qui est comme ca ou c une valeur que je doit entree .
alors merci de bein vouloir m'aidé
A voir également:
- Genere un nombre reel aleatoire en C
- Maps satellite en temps réel - Guide
- Nombre facile - Télécharger - Outils professionnels
- Google maps trafic en temps réel - Guide
- Regle reel - Guide
- Gto nombre episode ✓ - Forum Jeux vidéo
9 réponses
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
2 juin 2009 à 17:39
2 juin 2009 à 17:39
http://www.cplusplus.com/reference/cstdlib/rand/
randmax est une constante définie dans cstdlib et qui est au moin égale à 32676
si tu veux un nombre entre 0 et 1, je te conseilles de faire
j=(float) rand / RAND_MAX ;
randmax est une constante définie dans cstdlib et qui est au moin égale à 32676
si tu veux un nombre entre 0 et 1, je te conseilles de faire
j=(float) rand / RAND_MAX ;
slt merci pour une reponse aussi rapide, j ai modifier l'algo mais il me sort des valeurs trestrestres grand en plus des fois elle sont negative
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
2 juin 2009 à 18:02
2 juin 2009 à 18:02
j= (rand() % 1000)/(float)1000
ca donne quoi ? la precision est au milième, masi tu peux augmenter
ca donne quoi ? la precision est au milième, masi tu peux augmenter
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
3 juin 2009 à 09:10
3 juin 2009 à 09:10
avec le 2°, le 0 est inclu, mais pas le 1. Si tu veux veux le 1, il faut remplacer le premier 1000 par 1001
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
3 juin 2009 à 09:21
3 juin 2009 à 09:21
Salut.
Juste pour dire que selon l'utilisation rechercher, le modulo ce n'est pas bien. En particulier pour les applications scientifiques qui nécessitent une distribution réellement uniforme.
Prenons comme exemple un dé allant de 0 à 5, et que nous désirions avoir une valeur aléatoire entre 0 et 4.
Si nous faisons valeur_du_dé%5 pour avoir cettevaleur aléatoire, nous avons une probabilité de 1/6 d'avoir les nombres 1 2 3 4, mais une probabilité de 1/3 d'avoir 0 car 1/6 d'avoir 0 et 1/6 d'avoir 5 qui donne 0 grâce au modulo. 0 a donc plus de chance de sortir.
Le bonne façon de calibrer une variable aléatoire pour qu'elle rentre dans un domaine donné est de faire une règle de 3 en divisant par la valeur maxi de la variable et en multipliant par la valeur maxi que l'on veux.
Juste pour dire que selon l'utilisation rechercher, le modulo ce n'est pas bien. En particulier pour les applications scientifiques qui nécessitent une distribution réellement uniforme.
Prenons comme exemple un dé allant de 0 à 5, et que nous désirions avoir une valeur aléatoire entre 0 et 4.
Si nous faisons valeur_du_dé%5 pour avoir cettevaleur aléatoire, nous avons une probabilité de 1/6 d'avoir les nombres 1 2 3 4, mais une probabilité de 1/3 d'avoir 0 car 1/6 d'avoir 0 et 1/6 d'avoir 5 qui donne 0 grâce au modulo. 0 a donc plus de chance de sortir.
Le bonne façon de calibrer une variable aléatoire pour qu'elle rentre dans un domaine donné est de faire une règle de 3 en divisant par la valeur maxi de la variable et en multipliant par la valeur maxi que l'on veux.
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
3 juin 2009 à 09:28
3 juin 2009 à 09:28
c'est vrai, je suis entierement d'accord, le dernier nombre risque de sortir un peu moins souvent
ceci dit, pour une utilisation scientifique, tu ne prendra pas non plus la fonction rand de base du C, car comme tu le vois dans cette exemple, on l'initialise généralement sur l'heure courante, et ce n'est pas vraiment top pour faire de l'aléatoire... De toute manière, l'aléatoire en informatique n'existe pas (ce serait inquiétant), on parle plus généralement de pseudo-aléatoire
ceci dit, pour une utilisation scientifique, tu ne prendra pas non plus la fonction rand de base du C, car comme tu le vois dans cette exemple, on l'initialise généralement sur l'heure courante, et ce n'est pas vraiment top pour faire de l'aléatoire... De toute manière, l'aléatoire en informatique n'existe pas (ce serait inquiétant), on parle plus généralement de pseudo-aléatoire
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
3 juin 2009 à 10:23
3 juin 2009 à 10:23
C'est vrai Nabla's. Mais le rand() suffit dans bien des cas.
Par exemple en simu monte carlos de diffusion. Mais la densité de probabilité est très importante, le modulo la modifie, alors que dans le générateur pseudo aléatoire elle est tout de même bien respecté.
Ou pour être plus imagé, dans les cas où rand() est suffisant, rand()%x donnera de mauvais résultats.
Je pense que ça doit s'en resentir aussi si tu fait des math.
Par exemple en simu monte carlos de diffusion. Mais la densité de probabilité est très importante, le modulo la modifie, alors que dans le générateur pseudo aléatoire elle est tout de même bien respecté.
Ou pour être plus imagé, dans les cas où rand() est suffisant, rand()%x donnera de mauvais résultats.
Je pense que ça doit s'en resentir aussi si tu fait des math.
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
3 juin 2009 à 10:39
3 juin 2009 à 10:39
ou si tu montes un jeux de casino en ligne, géré en C ;)
20 mai 2014 à 11:20
Et comment on fait si on veut que le nombre aléatoire donné soit entre 5,56 et 27,25?
Cordialement
20 mai 2014 à 12:07
Merci d'ouvrir ton propre post :-).
20 mai 2014 à 12:21
je t'aide, c'est une fonction linéaire (y=ax+b)
20 mai 2014 à 13:40
prend un cours de C depuis le début et refait tout ça. C'est n'importe quoi.