我想知道,是否有可能在c中的两个限制之间生成一个随机数。即我的程序设置如下:
function x
{
generate random number;
}
while(1)
{
function x;
delay
}
所以基本上我希望每次调用函数时都会生成一个随机数,但数字必须介于例如100和800之间
我知道stdlib.h
中已经有一个名为random和randmize的函数
我只是不知道如何创建上限和下限
谢谢
答案 0 :(得分:6)
首先,不要忘记为您的PRNG种植一次:
srand(time(NULL));
然后,这个函数应该做你想做的事 (经过轻微测试,似乎有效)
int RandRange(int Min, int Max)
{
int diff = Max-Min;
return (int) (((double)(diff+1)/RAND_MAX) * rand() + Min);
}
在您的情况下,您需要:
x = RandRange(100, 800); /* x will be between 100 and 800, inclusive */
这使用浮点数学,可能比模数(%)算术慢,但偏差较小。
答案 1 :(得分:3)
首先得到0到1之间的随机数(R
)。然后将其缩放到所需范围(R* (right limit - left limit)
)。然后添加最小期望值。
int rand_between(int l, int r) {
return (int)( (rand() / (RAND_MAX * 1.0f)) * (r - l) + l);
}
答案 2 :(得分:0)
查看模数运算符。
int r = rand();
r = (r % 700) + 100;
700是范围的差异。