Que signifie rand ()% range + lower? [fermé]
J'apprends C en ce moment et je ne comprends pas ce que signifie le rand() % range + lower
dans cette ligne de code.
printf("I will generate 10 random numbers between %d and %d . . .\n", lower, upper);
int range = upper - lower+1;
for(int i = 0; i <= 10; i++) {
int number = rand() % range + lower;
printf("%d\t", number);
Réponses
C'est le générateur aléatoire linéaire d'un pauvre homme.
Il est en effet aléatoire car il est alimenté à partir rand()
duquel retourne un entier aléatoire, et par construction la valeur est> = inférieur et <= supérieur.
Mais c'est toujours l'outil du pauvre parce que les valeurs de l'intervalle [inférieur, supérieur] peuvent avoir des probabilités différentes.
En bref, il peut être utilisé si vous avez juste besoin de valeurs aléatoires, mais ne devrait pas l'être si vous avez besoin d'une source aléatoire sécurisée cryptographique.
Veuillez lire à propos de l'opérateur%. C'est la division modulo. La division Modulo est un bon outil pour mapper la plus grande plage sur la plage la plus courte (dans votre cas, rand ()% range ). Il vous suffit d'ajouter un début de plage pour déplacer toutes les valeurs vers les positions correctes. Le code rand ()% range + lower est l'idiome C standard pour obtenir des nombres aléatoires à partir de la plage A, B. Vous pouvez trouver plus d'idiomes, par exemple pour les nombres à virgule flottante avec plage (A, B) ou plage <A, B>.