我需要一个函数,将生成一个给定范围内的随机整数(包括边界值)。我没有不合理的质量/随机性要求; 我有四个要求:
我目前有以下 C + + 代码:
output = min + (rand() * (int)(max - min) / RAND_MAX)
问题是它并不是真正统一的——只有当 RAND () = RAND _ MAX 时才返回 Max(对于 Visual C + + ,它是1/32727)。对于 <-1,1 > 这样的小范围来说,这是一个主要问题,因为最后一个值几乎从不返回。
所以我抓起笔和纸,想出了下面的公式(建立在(int)(n + 0.5)整数四舍五入技巧的基础上) :
但它仍然不能给我一个统一的分布。对10000个样本进行重复运行,得到值为 -1,0的比例为37:50:13。1.
还有更好的公式吗? (或者甚至是整个伪随机数生成函数?)