c++ - 我的结果并不是真正随机的。我怎样才能解决这个问题?
问题描述
float genData(int low, int high);
int main(){
srand(time(0));
float num = genData(40, 100);
cout << fixed << left << setprecision(2) << num << endl;
return 0;
}
float genData(int low, int high) {
low *= 100;
high *= 100 + 1;
int rnd = rand() % (high - low) + low;
float newRand;
newRand = (float) rnd / 100;
return newRand;
}
我期待一个介于 40 和 100 之间的随机数,包括两位小数。例如:69.69、42.00
我得到的是具有不同十进制值的相同数字,每次运行程序时都会缓慢增加。
解决方案
为此使用<random>
标题:
#include <iostream>
#include <random>
float getData(int const low, int const high) {
thread_local auto engine = std::mt19937{ std::random_device{}() };
auto dist = std::uniform_int_distribution<int>{ low * 100, high * 100 };
return dist(engine) / 100.0f;
}
int main() {
for (auto i = 0; i != 5; ++i) {
std::cout << getData(40, 100) << '\n';
}
}
推荐阅读
- dart - 使用颤振的多用户应用程序
- python - 检查随机生成的数组中是否存在值
- php - PHP全局关键字如何在使用范围的函数内工作?
- python - 如何将 Pandas 系列转换为 Dataframe 以进行合并
- c - 在 68HC16 上使用 gcc 2.8.1;制作安装问题
- bokeh - 如何在 HoloViews 中设置散景刻度和字体选项?
- react-native - 如何在 react-native 中修复“CredentialsError:配置中缺少凭据”(aws-sdk)
- laravel - 运行迁移后填充表
- docker - init: true 不转发信号
- python-3.x - 如何有条件地从多个 Python 字典中删除键。条件是 (Value <= time.time()- 15)