【发布时间】:2015-02-03 16:15:47
【问题描述】:
到目前为止,我有一个函数可以在固定范围(最小值,最大值)内生成一个随机整数值,它似乎可以工作。但是,如果我的范围是 (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));
【问题讨论】:
-
0 到 100,8 的倍数。嗯,12.5 间隔。
-
Max-Min+1的一个潜在问题是结果可能很容易溢出。 -
注意:
((float)rand()/(float)(RAND_MAX+1))可能会生成 0.0,但不会生成 1.0。 IOWs[0.0, 1.0)- 不完全是“0 到 1 之间的值”。
标签: c random intervals uniform