double randDouble()
{
double out;
out = (double)rand()/(RAND_MAX + 1); //each iteration produces a number in [0, 1)
out = (rand() + out)/RAND_MAX;
out = (rand() + out)/RAND_MAX;
out = (rand() + out)/RAND_MAX;
out = (rand() + out)/RAND_MAX;
out = (rand() + out)/RAND_MAX;
return out;
}
Не так быстро, как double X=((double)rand()/(double)RAND_MAX);
, но с лучшим распределением. Этот алгоритм дает только RAND_MAX равномерно распределенный выбор возвращаемых значений; этот дает RANDMAX ^ 6, поэтому его распространение ограничено только точностью double.
Если вы хотите длинный двойной, просто добавьте несколько итераций. Если вам нужно число в [0, 1], а не в [0, 1), просто сделайте в строке 4 чтение out = (double)rand()/(RAND_MAX);
.