Cosa significa rand ()% range + lower? [chiuso]
Sto imparando C in questo momento e non capisco cosa significhi rand() % range + lowerin questa riga di codice.
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);
Risposte
Questo è il generatore casuale lineare di un uomo povero.
È infatti casuale perché è alimentato da rand()cui restituisce un numero intero casuale, e per costruzione il valore è> = inferiore e <= superiore.
Ma è ancora uno strumento per poveri perché i valori nell'intervallo [inferiore, superiore] possono avere probabilità diverse.
La storia lunga in breve, può essere utilizzata se hai solo bisogno di alcuni valori casuali, ma non dovrebbe esserlo se hai bisogno di una fonte casuale crittografica sicura.
Leggere l'operatore abut%. È la divisione modulo. La divisione Modulo è un ottimo strumento per mappare un intervallo compreso tra il range più ampio e quello più breve (nel tuo caso rand ()% range ). È sufficiente aggiungere l'inizio dell'intervallo per spostare tutti i valori nelle posizioni corrette. Code rand ()% range + lower è l'idioma C standard per ottenere numeri casuali dall'intervallo A, B. È possibile trovare più espressioni idiomatiche, ad esempio per i numeri a virgola mobile con intervallo (A, B) o intervallo <A, B>.