Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中的两点之间拾取随机数_C_Random - Fatal编程技术网

在C中的两点之间拾取随机数

在C中的两点之间拾取随机数,c,random,C,Random,我想知道,是否有可能在c中的两个极限之间生成一个随机数。即,我的程序设置如下: function x { generate random number; } while(1) { function x; delay } 因此,基本上,我希望每次调用函数时都生成一个随机数,但该数必须介于100和800之间 我知道在stdlib.h 我只是不知道如何设定上限和下限 谢谢首先获取一个介于0和1之间的随机数(R)。然后将其缩放到所需范围(R*(右极限-左极限))。然后添加所需

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

function x
{
    generate random number;
}

while(1)
{
    function x;
    delay
}
因此,基本上,我希望每次调用函数时都生成一个随机数,但该数必须介于100和800之间

我知道在
stdlib.h
我只是不知道如何设定上限和下限


谢谢

首先获取一个介于0和1之间的随机数(
R
)。然后将其缩放到所需范围(
R*(右极限-左极限)
)。然后添加所需的最小值

int rand_between(int l, int r) {
  return (int)( (rand() / (RAND_MAX * 1.0f)) * (r - l) + l);
}

看看模运算符

int r = rand();
r = (r % 700) + 100;

700是范围的差异。

首先,别忘了为PRNG播种一次,而且只能播种一次:

srand(time(NULL));
然后,此函数应该执行您想要的操作。
(轻微测试,似乎有效)

在您的情况下,您需要:

x = RandRange(100, 800);  /* x will be between 100 and 800, inclusive */

这使用浮点运算,它可能比模(%)运算慢,但偏差较小。

模可能会生成有偏差的随机数,因为某个范围可能包含非均匀模映射。如果是这样,我相信生成器已经有偏差且不好。让情况变得更糟是好是坏是有争议的,因为让情况变得更糟会增加发现和改进的可能性。@perreal有一个更好的答案。为了清晰起见,我贴了这张。我不知道海报打算如何使用答案。“足够好可能就足够好了”。@乔:生成器可以是完美的,模仍然会产生偏差。考虑非常简单的情况,其中RANDYMAX=10,并且执行模3。有了完美的分布,你将得到40%的零,40%的一,只有30%的二,因此:在这个简单的例子中,对二(2)的偏见。用大的数字很难看出偏差,但它仍然存在。@abelenky是的,我的错误。我承认我自己更担心算法。如果我有能力设置rand_max,我就不会使用mod;正常的RAND_MAX的规格是:“该值依赖于库,但被授予至少32767。”有没有一种方法可以在两个限制之间生成一个数字,而不使用sran和RAND函数?我有一个while(1)(超级循环),它每10毫秒调用一个函数。如果你想要一个随机数,您必须使用rand(),或者编写自己的PRNG。
x = RandRange(100, 800);  /* x will be between 100 and 800, inclusive */