Co oznacza rand ()% zakres + niższy? [Zamknięte]
Uczę się C w tej chwili i nie rozumiem, co oznacza rand() % range + lower
ten wiersz kodu.
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);
Odpowiedzi
To jest losowy generator liniowy dla biednych.
Jest rzeczywiście losowy, ponieważ jest zasilany, z rand()
którego zwraca losową liczbę całkowitą, a konstrukcja ma wartość> = dolna i <= górna.
Ale nadal jest to narzędzie dla biednych, ponieważ wartości w [dolnym, górnym] przedziale mogą mieć różne prawdopodobieństwa.
Krótka historia, może być używana, jeśli potrzebujesz tylko losowych wartości, ale nie powinno być, jeśli potrzebujesz kryptograficznego bezpiecznego losowego źródła.
Przeczytaj o operatorze%. Jest to podział modulo. Dzielenie modulo jest dobrym narzędziem do jednolitego mapowania największego zakresu do najkrótszego zakresu (w twoim przypadku rand ()% zakresu ). Wystarczy dodać początek zakresu, aby przesunąć wszystkie wartości na prawidłowe pozycje. Kod rand ()% range + lower to standardowy idiom języka C do pobierania liczb losowych z zakresu A, B. Możesz znaleźć więcej idiomów, na przykład dla liczb zmiennoprzecinkowych z zakresem (A, B) lub zakresem <A, B>.