Tag: 均匀

以N为模的随机数的均匀性

在[0,n)中选择随机数的一种常用方法是采用rand() modulo n : rand() % n 。 但是,即使可用的rand()实现返回的结果完全一致,当RAND_MAX + 1不均匀地除以n时,不应该产生[0,n]数的一致性问题。 例如,假设RAND_MAX是2, n是2.然后在3个可能的rand()输出中:0,1和2,当我们使用模n时,我们分别得到0,1和0。 因此输出将根本不均匀。 这在实践中是一个真正的问题吗? 选择[0,n]中的随机数是一种更好的方法,从rand()输出中均匀导出,最好没有任何浮点运算?

在C中生成INTEGERS的均匀分布

我编写了一个C函数,我认为从范围[rangeLow,rangeHigh](包括范围)的均匀分布中选择整数 。 这不是家庭作业 – 我只是在一些嵌入式系统中使用它来修补我正在做的事情。 在我的测试用例中,此代码似乎产生了适当的分布。 但是,我并不完全相信实施是正确的。 如果我在这里做错了什么,有人可以做一次健全检查并让我知道吗? //uniform_distribution returns an INTEGER in [rangeLow, rangeHigh], inclusive. int uniform_distribution(int rangeLow, int rangeHigh) { int myRand = (int)rand(); int range = rangeHigh – rangeLow + 1; //+1 makes it [rangeLow, rangeHigh], inclusive. int myRand_scaled = (myRand % range) + rangeLow; return myRand_scaled; } //note: make sure rand() […]