为了账号安全,请及时绑定邮箱和手机立即绑定

从范围生成随机整数

从范围生成随机整数

C++
慕标琳琳 2019-06-23 17:02:29
从范围生成随机整数我需要一个函数,它将在给定的范围内生成一个随机整数(包括边框值)。我没有不合理的质量/随机性要求,我有四个要求:我需要它快点。我的项目需要生成数百万(有时甚至数千万)随机数,而我当前的生成器功能已经被证明是一个瓶颈。我需要它是合理的统一(使用兰特()是完全好的)。最小-最大值范围可以是从<32727,1>到<-32727,32727>的任何范围.它必须是可播种的。我现在有以下C+代码:output = min + (rand() * (int)(max - min) / RAND_MAX)问题是,只有当rand()=rand_max(对于Visualc+是1/32727)时才返回它不是真正的一致-max。对于诸如<-1,1>这样的小范围来说,这是一个主要问题,因为最后一个值几乎永远不会返回。于是我抓起笔和纸,提出了以下公式(它建立在(Int)(n+0.5)整数四舍五入技巧的基础上):但它仍然没有给我统一的分布。重复运行的10000个样本给我的比率为37:50:13的数值-1,0。1.你能推荐更好的配方吗?(甚至整个伪随机数产生函数)
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

一个快速的,略好于您的,但仍然不完全统一的分布式解决方案是

output = min + (rand() % static_cast<int>(max - min + 1))

除非范围的大小是2次方,这种方法产生偏非均匀分布数字不管质量rand()..为了全面测试这种方法的质量,请读这个.


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 478 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信