Как создать рандомайзер вещественных чисел в C++?
Нашел два способа в этом вопросе Как создать рандом на C++, но они оба касаются целого типа, в то время как у меня на вход как диапазон рандомайзера поступают вещественные числа с неопределенным количеством знаков после запятой. Не подскажите, как сделать такой рандомайзер?
Ответы (2 шт):
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 до требуемого значения
Почти точно так же:
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>..