Que signifie rand ()% range + lower? [fermé]

Dec 18 2020

J'apprends C en ce moment et je ne comprends pas ce que signifie le rand() % range + lowerdans 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

SergeBallesta Dec 18 2020 at 18:24

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.

JhnW Dec 18 2020 at 18:32

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>.