Генерация случайного числа с плавающей запятой в диапазоне
Пытаюсь сгенерировать случайные числа в диапазоне, но они получаются с маленьким диапазоном и не доходят до верхних границ
float random(float a, float b){
//[a,b]
return a + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(b-a)) );
}
int main(){
srand( time(NULL) );
printf("random %f", random (-3,1));
return 0;
}
Как исправить, чтобы числа были случайными с хорошим распределением?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Лучше всего не мучиться со старым rand(), а прибегнуть к возможностям C++11:
float random(float a, float b)
{
static mt19937 gen(random_device{}());
uniform_real_distribution<float> dis(a,b);
return dis(gen);
}
См. пример.