随机数生成器不断创建2
Random number generator keeps creating 2
我正在使用
#include<conio.h>
#include<stdlib.h>
以生成1-10的随机数。
代码是:
rando = rand() % 10 + 1;
由于某种原因2一直在生成。我的措辞有问题吗?
要生成从1到10的随机节点,您应该真正使用rand() % 10 + 1
但首先需要初始化随机种子,看看例子:
#include <stdio.h> /* printf, NULL */
#include <stdlib.h> /* srand, rand */
#include <time.h>
int iSecret ;
/* initialize random seed: */
srand (time(NULL));
/* generate secret number between 1 and 10: */
iSecret = rand() % 10 + 1;
如果您使用C++11,您可以考虑使用<random>
标头(您还必须为随机引擎播种):
#include <random>
std::random_device rd;
std::default_random_engine dre(rd());
std::uniform_int_distribution<int> uid(1,10);
int number = uid(dre);
1)你不应该使用rand()
,它有分布不好、周期短等…
2) 当MaxValue % x != 0
时,你不应该使用%x
,因为你扰乱了均匀分布(假设你不使用rand()),例如32767 % 10 = 7
,所以数字0-7更有可能得到
观看此获取更多信息:走向本土2013-Stephan T.Lavavej-rand()被认为有害
你应该使用这样的东西:
#include <random>
std::random_device rdev;
std::mt19937 rgen(rdev());
std::uniform_int_distribution<int> idist(0,10); //(inclusive, inclusive)
我在代码中使用这样的东西:
template <typename T>
T Math::randomFrom(const T min, const T max)
{
static std::random_device rdev;
static std::default_random_engine re(rdev());
typedef typename std::conditional<
std::is_floating_point<T>::value,
std::uniform_real_distribution<T>,
std::uniform_int_distribution<T>>::type dist_type;
dist_type uni(min, max);
return static_cast<T>(uni(re));
}
注意:该实现不是线程安全的,并且为每个调用构造一个分布。这是低效的。但您可以根据自己的需要对其进行修改。
您的问题是您没有初始化rand()
的种子,即您没有调用srand()
(通常是srand(time(NULL))
的旧形式),因此您得到了相同的数字序列。
但是,无论如何,都不应该在C++11及更新版本中使用rand()
。您可能需要使用std::mt19937
和std::uniform_int_distribution
。
您可能想阅读此答案以了解更多详细信息
(我不会在这里重复代码和答案文本)。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 制作具有平均值的随机数生成器
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 尝试在 c++ 中创建随机数生成器并收到错误
- 存储并重新加载随机数生成器状态
- 作为随机数生成器的争用条件
- 播种随机数生成器以使用分叉的好方法是什么?
- 随机数生成器的性能因平台而异
- 随机数生成器的种子和状态有什么区别?
- RcppShark 随机森林示例引发有关随机数生成器的异常
- C++多个实例的随机数生成器组种子中增强
- C++随机数生成器仅生成 0 - C++ 11
- GSL+OMP:C++中的线程安全随机数生成器
- 使用MersenneTwister从泊松区创建随机数
- 贪吃蛇游戏 - 食物瓷砖的随机数生成器
- 随机数生成器在 C++ 用于 skipList.
- RSA 加密和解密期间的随机数生成器要求
- 如何使用 cpp 设置随机数生成器的语法?
- 如何在C 中创建正常分布式随机数生成器的数组
- 随机数生成器不断创建2