C++中的半随机数生成
Semi-random numbers generation in C++
假设我有一组数字x={0,0,0、1、2、2、3}。有没有一种方法可以让我使用rand()从这个列表中打印出随机数,这样生成的数字在一段时间内的比例实际上就是集合中数字的原始比例?换句话说,使得零的比例将是大约0.5,一将是0.125,二将是0.25,三将是0.125。
您可以通过指定频率来实现:
#include <iostream>
#include <random>
int main()
{
using namespace std;
mt19937_64 engine;
discrete_distribution<int> numbers{4, 1, 2, 1};
cout << numbers(engine) << endl;
}
快速方法:
int values[8] = { 0, 0, 0, 0, 1, 2, 2, 3 };
int randomIndex = rand() % 8; // NOTE: feel free to replace with & 0x7
int randomValue = values[randomIndex];
注:为了提供均匀分布,数值的数量应为2的幂(2,4,8,16等)。如果您需要其他号码,您可以使用以下号码:
int rand_range(int maxValue)
{
int mask = 0;
int tmp = maxValue;
int r;
while (tmp > 0)
{
mask = (mask << 1) | 1;
tmp= (tmp>> 1);
}
r = rand() & mask;
while (r > maxValue)
r = rand() & mask;
return r;
}
int values[XXXX] = { 0, 0, 0, 0, 1, 2, 2, 3, ... };
int randomIndex = rand_range(XXXX-1); // NOTE: -1 as maxValue is inclusive
int randomValue = values[randomIndex];
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 整数不会重复超过随机数
- if数组上的随机数
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 半随机数生成C++
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 有没有办法在 c++ 中同时生成随机数?如果没有,是否有解决方法?
- 具有随机数的二维数组不会更改
- 随机数未达到限制
- 我想生成许多矩阵并用随机数填充它
- <random>在实践中应该实际使用哪个随机数引擎? std::mt19937?
- 制作具有平均值的随机数生成器
- 为什么 rand 不在我的代码中生成随机数?
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 从给定种子生成相同的随机数序列C++
- 随机数生成函数说明
- C++ 尝试生成随机数时弹出警告帮助?
- 尝试在 c++ 中创建随机数生成器并收到错误
- 从给定的随机数组值生成随机数 Arduino程序C++
- 如何在个人计算机和群集 (c++) 上生成相同的随机数