Что вы хотите сделать что-то вроде этого:
double RealRand (double up_to)
{
return double(rand())/RAND_MAX * up_to;
}
Эффективно, что это делает сначала сгенерировать случайное число в диапазоне от 0 до 1 (слева включительно), а затем масштабировать число до [0 .. up_to
]. (Примечание: на случай, если вы не знаете, функция rand()
генерирует случайные целые числа от 0 до RAND_MAX
.)
Однако есть (по крайней мере) две причины, по которым вы не хотите этого делать. Во-первых, rand()
обычно является плохим генератором случайных чисел. Во-вторых, на некоторых платформах (например, Visual C++) RAND_MAX
- очень небольшое число (32767 или что-то еще), что приводит к очень плохим разрешениям для генерируемых реальных значений.
Настоятельно рекомендуется использовать заголовок <random>
(новый C++).
НЕТ! 'rand()' ужасен, и поэтому модуль в сочетании с ним! [Смотрите этот хороший разговор.] (Http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful) – chris
Используйте [''] (http://en.cppreference.com/w/ cpp/numeric/random) с равномерным реальным распределением. –
WhozCraig