2017-07-19 4 views
1

J'ai donc besoin de générer aléatoirement un double entre 2 doubles, et dans ce cas précis, il s'agit de générer aléatoirement une GPA. J'ai essayé au début de faire ceci:C++ générer un double entre 2 doubles

srand(time(NULL)); 

double rands1 = rand() % (4) + ((rand() % (10))/10.0); 

Et ceci fonctionne ... la plupart du temps. Je peux aller de 0.0 à 3.9, mais ça doit être de 0.0 à 4.0 inclus! Changer le 4 dans le code à un 5 peut donner 4.1 et plus aussi bien, mais ce n'est pas bon.

Ma question est, ce qui serait un moyen plus efficace de coder cela? Je suis désolé s'il y a une réponse assez simple/si cela semble simple, mais je suis assez nouveau pour le codage et C++. Je vous remercie!

+1

Pouvez-vous utiliser 11 fonctionnalités C++? – WhiZTiM

+1

Copie possible de [Générer un entier aléatoire à partir d'une plage] (https://stackoverflow.com/questions/5008804/generating-random-integer-from-a-range) – Software2

+2

Vous pouvez toujours considérer, compris entre 0.0 et 4.0, comme des entiers 0 à 40. Faire la division après, le cas échéant. –

Répondre

0

Si c'est juste pour trouver un gpa à une décimale, vous pouvez trouver un int entre 0 et 41 puis diviser par 10 pour obtenir un nombre décimal. Par exemple:

double rand2 = (double)(rand()%41)/10; 

rand()% 41 génère un nombre compris entre 0 et 40 inclus. Ensuite, nous le transformons en double et divisons par 10. Ainsi, si le nombre généré est 34, nous obtenons 3,4 comme un double.

Pour utiliser d'autres doubles comme la gamme, vous serait juste de les multiplier par le nombre de décimales que vous voulez après le numéro, puis diviser aussi par ce nombre

//Range== 0,34 with 3 decimal places  
double rand2 = (double)(rand()%35000)/1000; 
+0

C'est certainement la façon la plus simple pour moi de suivre, j'aurais dû réfléchir davantage sur les mathématiques réelles plutôt que d'essayer d'avoir un code parfait. Merci beaucoup!! –