[英]rand() gives back higher int than my max c++
所以我希望我不是在问一些愚蠢的事情。
我希望我的程序在点击一个按钮时暂停从2000到5999的随机数量的ms,所以这里是行:
void ExpNatDlg::OnBnClickedBack()
{
int delayRand;
delayRand = (int)rand() % 6000 + 2000;
Sleep(delayRand);
}
为了检查我得到的延迟,我将它们打印在一个文件上,我不知道为什么,我有时会得到超过7000毫秒的延迟...
我不知道我错过了什么! 谢谢你的帮助!
这是一个简单的数学问题。 rand()%6000给出从0到5999的结果。添加2000给出2000到7999的结果。
问题是(int)rand() % 6000
将在任何地方达到5999,因此当你添加2000时,你将超过阈值。 要获得最小值和最大值2000和6000,您需要(int)rand() % 4000 + 2000
。 这是因为随机数将在0到3999的范围内生成,然后添加2000将给出范围2000到5999。
如果您有c ++ 11可用,您可以编写如下代码:
///init for RNG
std::random_device rd;
std::default_random_engine generator;
generator.seed( rd() );
//using the RNG
std::uniform_int_distribution<int> distribution(0,6000);
Sleep(distribution(generator));
这里的好处是随机数将具有更高的质量,并且您的代码的意图更清晰。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.