Почему rand() не выводит нужное значение от -0.1 до 0.2?

Функция rand(), определенная в стандартной библиотеке C++, используется для генерации случайных чисел. Однако, она генерирует только псевдослучайные числа из равномерного распределения в диапазоне от 0 до RAND_MAX.

RAND_MAX - это максимальное значение, которое может быть сгенерировано функцией rand(), и оно зависит от реализации компилятора. В большинстве случаев RAND_MAX равен 32767.

Поскольку rand() генерирует числа только от 0 до RAND_MAX, для того чтобы получить числа в нужном нам диапазоне, мы должны выполнить некоторые дополнительные операции.

Один из способов получить значения от -0.1 до 0.2 с использованием rand() - это сгенерировать случайное число в диапазоне от 0 до RAND_MAX, а затем масштабировать результат до нужного диапазона. Мы можем выполнить это следующим образом:

1. Сгенерировать случайное число от 0 до RAND_MAX с помощью rand().
2. Разделить его на RAND_MAX для получения значения в диапазоне от 0 до 1.
3. Умножить результат на разницу между верхней и нижней границами нашего нужного диапазона (0.2 - (-0.1) = 0.3), чтобы получить число в диапазоне от 0 до 0.3.
4. Прибавить к результату нижнюю границу нашего нужного диапазона (-0.1), чтобы получить число в диапазоне от -0.1 до 0.2.

Пример реализации данного подхода в C++:

#include <iostream>
#include <cstdlib>

int main() {
    double lowerBound = -0.1;
    double upperBound = 0.2;

    int randValue = rand(); // сгенерировать случайное число от 0 до RAND_MAX
    double normalizedValue = randValue / static_cast<double>(RAND_MAX); // нормализовать значение в диапазоне от 0 до 1
    double scaledValue = normalizedValue * (upperBound - lowerBound); // масштабировать значение до нужного диапазона
    double finalValue = scaledValue + lowerBound; // прибавить нижнюю границу

    std::cout << finalValue << std::endl;

    return 0;
}

Таким образом, используя приведенный выше код, вы сможете генерировать случайные числа в диапазоне от -0.1 до 0.2 с использованием функции rand().