在C中的两点之间挑选随机数

时间:2012-03-05 18:16:05

标签: c random

我想知道,是否有可能在c中的两个限制之间生成一个随机数。即我的程序设置如下:

function x
{
    generate random number;
}

while(1)
{
    function x;
    delay
}

所以基本上我希望每次调用函数时都会生成一个随机数,但数字必须介于例如100和800之间

我知道stdlib.h中已经有一个名为random和randmize的函数 我只是不知道如何创建上限和下限

谢谢

3 个答案:

答案 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是范围的差异。