Генерация случайного числа с плавающей запятой в диапазоне

Пытаюсь сгенерировать случайные числа в диапазоне, но они получаются с маленьким диапазоном и не доходят до верхних границ

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);
}

См. пример.

→ Ссылка