Как создать рандомайзер вещественных чисел в C++?

Нашел два способа в этом вопросе Как создать рандом на C++, но они оба касаются целого типа, в то время как у меня на вход как диапазон рандомайзера поступают вещественные числа с неопределенным количеством знаков после запятой. Не подскажите, как сделать такой рандомайзер?


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

Автор решения: Vladimir Afanasyev
srand (static_cast <unsigned> (time(0)));
float x = min + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(max-min)));

srand (static_cast <unsigned> (time(0))); - задаем seed

min - значение от

max - значение до

Если нужно от 0.0 до 1.0, то убираете коэффициенты min и max-min, по аналогии и если от 0.0 до требуемого значения

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

Почти точно так же:

random_device rd;
default_random_engine gen(rd());
uniform_real_distribution<> dis(
                2.7182818,    // Ваш диапазон - начало
                3.1415926);   // и конец
for (int n = 0; n < 10; ++n) {

    cout << dis(gen) << ' ';

}

Можно указывать диапазон каждый раз при вызове:

default_random_engine gen(random_device{}());

uniform_real_distribution<> r;
cout << r(gen,
          uniform_real_distribution<>::param_type(2.7182818,
                                                  3.1415926));

P.S. Если планируете работать со случайными числами всерьез - забывайте о rand/srand, работайте со стандартной библиотекой <random>..

→ Ссылка