Пока у меня есть функция, которая генерирует случайное целочисленное значение в фиксированном диапазоне (минимум, максимум), и, похоже, она работает. Но как мне сделать так, чтобы, если мой диапазон был (0,100), возвращаемые случайные значения всегда были кратны 8? (то есть равные интервалы)
int generate_rand(int Min, int Max)
{
// Generates random number between min and max, inclusive.
int range, result, cutoff;
if (Min >= Max)
return Min; // only one outcome possible, or invalid parameters
range = Max-Min+1;
cutoff = (RAND_MAX / range) * range;
// Rejection method, to be statistically unbiased.
do {
result = rand();
} while (result >= cutoff);
return result % range + Min;
}
То же самое для кода ниже. Как я могу сделать так, чтобы переменная RANDOM_NUM всегда была кратна 20/3 каждый раз, когда я ее вызываю? Этот генерирует случайное значение с плавающей запятой от 0 до 1. (то есть равномерные интервалы)
RANDOM_NUM = ((float)rand()/(float)(RAND_MAX+1));
Max-Min+1
заключается в том, что результат может легко переполниться. - person chux - Reinstate Monica   schedule 03.02.2015((float)rand()/(float)(RAND_MAX+1))
может генерировать 0,0, но не 1,0. IOWs[0.0, 1.0)
- не совсем значение между 0 и 1. - person chux - Reinstate Monica   schedule 03.02.2015