Как rand в C принимает отрицательные значения в интервале?

Как понять смысл конструкции

rand() % 21 + (-10)

Не понятно значение (-10), т.е. здесь значение интервала до 21, но почему -10 указана в скобках и работает ли rand с отрицательными числами в интервале?


Ответы (3 шт):

Автор решения: Igor

Этот код возвращает случайное значение в интервале от -10 до 10.

→ Ссылка
Автор решения: MBo

Первая часть даёт диапазон случайных чисел 0..20, а вычитание десятки переводит его в диапазон -10..10

→ Ссылка
Автор решения: Zhihar

функция rand() выдаёт значение от 0 до 2^15 - 1 (32767)

rand() % 21 вычисляет остаток от деления полученного случайного числа на 21 (т.е. от 0 до 20).

поскольку остатки цикличны таким образом реализуется генерация случайного числа от 0 до 20 включительно

+ (-10) смещает случайное число влево на 10, т.е. вместо случайного числа в диапазоне 0..20 получается случайное число в диапазоне -10..10

P.S.

если бы требовалось не целочисленное значение, а действительное, то можно было бы сделать так:

float value = -10.0f + 20 * float(rand()) / 32767.0

P.S.

на счет 32767 я уже помню слабо, вроде можно было бы использовать константу RND_MAX или что-то такое

→ Ссылка