Привет всем! Хочу узнать как работает этот рядок:
x = 1+ (double)rand() / (double)RAND_MAX*(2 - 1);
Вывод дробовых чисел. RAND_MAX - это ведь 32767.. Объясните, пожалуйста, подробнее.
Диапазон от: [1;2)
Каким образом оно выводит число с плавающей точкой, если рандомное число / константу RAND_MAX, которая в свою очередь множится на (b-a).
Результат rand() преобразуется в double с помощью записи (double)rand(). После этого уже все остальное вычисляется с плавающей точкой.
Откройте учебник по языку и почитайте про преобразование типов.
Выражение:
(double)rand() / (double)RAND_MAX
дает в результате число в диапазоне [0;1], добавьте к нему 1 и получите диапазон [1;2].
Чтоб получить указанный вами диапазон сделайте так: x = 1. + (double)rand() / (double)(RAND_MAX + 1)