如果5 + rand() % 6
生成一个5到10的随机数,我将如何生成十进制数?我尝试将一个浮点变量赋给((4 + rand() % 8) / 100)
,但除了将变量赋值为零之外,它不会做任何事情。
答案 0 :(得分:3)
就个人而言,我会选择比rand()
更强大的东西(但这可能是因为我在需要高质量随机数的领域进行研究):
#include <random>
double randomDouble(double bottom, double top) {
std::uniform_real_distribution<double> dist(bottom, top);
std::mt19937 gen; // Mersenne Twister PRNG
return dist(gen);
}
这个小函数使用Mersenne Twister,这是一种普通类型的PRNG,其周期(重复之前的随机数)为2 ^ 19937 - 因此得名。现在就这样称呼它:
double foo = randomDouble(0.04, 0.11);
答案 1 :(得分:0)
有两种基本方法可以转换生成rand()
范围内数字的数字生成器[0, RAND_MAX]
,使其生成范围为[a, b]
的数字:
n = rand() % (b - a + 1) + a;
n = rand() * (b - a + 1) / (RAND_MAX + 1) + a;
第二种方法适用于非整数a
和b
的范围。
请记住,除了已经提到的随机数质量问题之外,此发生器可能无法产生足够密集的目标范围覆盖范围。 RAND_MAX
的值越大,覆盖范围就越密集。