从范围生成随机整数
我需要一个函数,该函数将在给定范围内(包括边界值)生成一个随机整数。我没有不合理的质量/随机性要求,我有四个要求: 我需要它快。我的项目需要生成数百万(有时甚至数千万)的随机数,而我目前的生成器功能已被证明是瓶颈。 我需要它合理地统一(使用rand()完全可以)。 最小-最大范围可以是<0,1>到<-32727,32727>的任何值。 它必须是可播种的。 我目前有以下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。 你能建议更好的配方吗?(甚至整个伪随机数生成器函数)