繁体   English   中英

rand()返回高于我的max c ++的int

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM