Variables aléatoires
MaximeTestori
Messages postés
12
Statut
Membre
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Salut à tous
J'ai trois variables doubles que je veux choisir aléatoirement mais compris entre un minimum>0 et un maximum qui sont pour chacune de ces variables différents.
Aidez moi s'il vous plait
J'ai trois variables doubles que je veux choisir aléatoirement mais compris entre un minimum>0 et un maximum qui sont pour chacune de ces variables différents.
Aidez moi s'il vous plait
8 réponses
-
Salut,
Je comprend pas bien la question, mais tu veux faire un random borné avec un min et un max ?
Si oui, c'est ça que tu veux ?:#include <stdio.h> #include <stdlib.h> #include <time.h> double my_rand(double min, double max) { return min + ((double)rand() / ((double)RAND_MAX / (max - min))); } int main(int argc, char** args) { int i = 0; srand(time(NULL)); for(i = 0; i < 20; i++) printf("%lf\n", my_rand(8.f, 50.f)); return 0; }
-
Pour info, pas besoin de caster tout caster en double. Seul le cast de rand() suffit.
Sinon ce n'est pas rand()/RAND_MAX/(max-min)...
Il faut multiplier plutôt par max-min. Voir même max-min+1.
Et il faut rajouter min aussi.
printf("%lf\n", my_rand(8.f, 50.f));
Ce n'est pas %lf qu'il faut mettre mais %f.
Ce n'est pas 8.f ou 50.f qu'il faut mettre mais 8.0 et 50.0. Ou simplement 8. et 50..
Cdlt, -
Salut,
"Il faut multiplier plutôt par max-min. Voir même max-min+1."
Mouep, j'ai fait ça comme ça mais visiblement il y a bien d'autres techniques:
https://stackoverflow.com/questions/10776073/random-double-between-min-and-max
"Ce n'est pas %lf qu'il faut mettre mais %f. "
umpfff,
printf float=%f
printf double=%lf -
umpfff, printf float=%f
printf double=%lf
Faut revoir ses bases en C !
print(), comme toutes les fonctions à nombre variable d'arguments réalise une promotion automatique de certains types. Par exemple les float sont convertis en double.
De fait, dans le printf, le %f sert au double (pas besoin de %lf). -
salut, sur ces questions de spécificateurs et de sous-spécificateurs de taille, je trouve que ce tableau présent sur cette page est très utile : http://www.cplusplus.com/reference/cstdio/printf/ (celui à la suite de "The length sub-specifier modifies the length of the data type. This is a chart showing the types used to interpret the corresponding arguments with and without length specifier (if a different type is used, the proper type promotion or conversion is performed, if allowed)")
en prime, il indique avec un code de couleur les sous-spécificateurs de taille introduits par C99 :-)
Dal
-
-
oui, par exemple une de mes variable s'appelle DiffTemps et la valeur aléatoire doit être comprise entre 5.56 et 27.25.
-
Salut,
Donc normalement la fonction "my_rand" devrait faire l'affaire.
my_rand(5.56, 27.25);
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Excuse moi est ce que tu peux m'expliquer cette partie?
nt main(int argc, char** args)
{
int i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(8.f, 50.f)); -
Salut,
"my_rand" c'est la fonction que je t'ai faite lors de mon premier poste :)
soit:double my_rand(double min, double max) { return min + ((double)rand() / ((double)RAND_MAX / (max - min))); }
le main n'est là que pour l'exemple...int main(int argc, char** args) { int i = 0; // variable pour la boucle for srand(time(NULL)); // initialisation de rand (obligatoire) for(i = 0; i < 20; i++) // boucle 20x pour afficher le resultat de la fonction my_rand printf("%lf\n", my_rand(8.f, 50.f)); // affiche un rand min=8.0 et max=50.0 return 0; }
-
Merci mais comment je précise que cette valeur qu'il va me donner est pour la variable DiffTemps car il y a deux autres variables pour lesquelles je vais utiliser la même structure pour avoir également des nombre aléatoire mais avec des extremums différents?
Je dois être chiant non... -
Je ne suis pas très doué en programmation donc est ce que quelqu'un peut me dire pourquoi l'algorithme suivant ne fonctionne pas?????
#define Min1 5,56
#define Max1 27,25
#define Min2 500,0
#define Max2 4500,0
#define Min3 36,0
#define Max3 1151,08
double my_rand(Min1, Max1)
{
return Min1+(Max1-Min1)*((double)rand())/((double)RAND_MAX);
}
i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(Min1.f, Max1.f));
double my_rand(Min2, Max2)
{
return Min2+(Max2-Min2)*((double)rand())/((double)RAND_MAX);
}
i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(Min2.f, Max2.f));
double my_rand(Min3, Max3)
{
return Min3+(Max3-Min3)*((double)rand())/((double)RAND_MAX);
}
i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(Min3.f, Max3.f));
Sachant que j'ai trois variables doubles que je veux choisir aléatoirement mais compris entre un minimum>0 et un maximum qui sont pour chacune de ces variables différents.
Apparemment il y a un probleme avec les double, my_rand, f et Max3...
Cordialement-
Bonjour,
Déjà, enlève tous les #define.
return Min1+(Max1-Min1)*((double)rand())/((double)RAND_MAX);
Mets plutôt : return Min1+(double)rand() / RAND_MAX * (Max1-Min+1);
Tu as oublié le main(). Du coup, pleins d'instruction sont hors fonction...
printf("%lf\n", my_rand(Min2.f, Max2.f));
Ce n'est pas %lf, mais %f qu'il faut utiliser. Ensuite, les arguments sont pas bons :
my_rand(2.0, 5.0); par exemple pour appeler la fonction my_rand(). -
Aïe ça pique,
Si on reprend avec tes defines:#include <stdlib.h> #include <stdio.h> #include <time.h> #define Min1 5.56 #define Max1 27.25 #define Min2 500 #define Max2 4500 #define Min3 36 #define Max3 1151.08 double my_rand(double min, double max) { return min+(max-min)*((double)rand())/((double)RAND_MAX); } int main(int argc, char** argv) { srand(time(NULL)); double var1 = my_rand(Min1, Max1); double var2 = my_rand(Min2, Max2); double var3 = my_rand(Min3, Max3); // utilisation de var1, var2, var3 return 0; }
-