rand() 返回的 int 比我的最大 C++ 高
rand() gives back higher int than my max c++
所以我希望我不是在问一些愚蠢的事情。
我希望我的程序在单击按钮时暂停从 2000 到 5999 的随机毫秒数,所以这里是几行:
void ExpNatDlg::OnBnClickedBack()
{
int delayRand;
delayRand = (int)rand() % 6000 + 2000;
Sleep(delayRand);
}
为了检查我得到的延迟,我将它们打印在一个文件中,我不知道为什么,我有时会得到超过 7000 毫秒的延迟......
我不知道我错过了什么!感谢您的帮助!
这是一个简单的数学问题。 兰德 () % 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));
这样做的好处是随机数的质量更高,代码的意图更清晰。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- clang整洁10忽略了我的NOLINT命令
- 为什么我的删除节点函数实际上没有删除节点?