【发布时间】:2012-07-25 01:54:21
【问题描述】:
我编写了一个 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()
附:我搜索了其他类似的问题。但是,很难过滤掉讨论随机整数而不是随机浮点数的一小部分问题。
【问题讨论】:
-
为了获得不错的随机性,您可能必须使用特定于平台的东西,或者至少使用标准 C 之外的东西,例如POSIX 或 BSD 规范函数
标签: c algorithm statistics integer uniform