我编写了一个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() was already initialized using srand()
Run Code Online (Sandbox Code Playgroud)
PS我搜索了这样的其他问题.但是,很难过滤掉讨论随机整数而不是随机浮点数的小问题子集.
我想在一个范围内得到一个随机数,不包括一个数字(例如从1到1000不包括577).我搜索了一个解决方案,但从未解决过我的问题.
我想要的东西:
Math.floor((Math.random() * 1000) + 1).exclude(577);
Run Code Online (Sandbox Code Playgroud)
我想避免for循环创建一个尽可能多的数组,因为长度总是不同的(有时1到10000,有时是685到888555444等),生成它的过程可能需要太多时间.
我已经尝试过:
我怎么能实现这个目标?