如何在C++中生成0.04到0.11之间的随机数?

如何在C++中生成0.04到0.11之间的随机数?,c++,C++,如果5+rand%6生成一个从5到10的随机数,我将如何生成十进制数?我尝试将一个浮点变量赋值为4+rand%8/100,但除了将变量赋值为零之外,这没有任何作用。就我个人而言,我会选择比rand更稳健的变量,但这可能是因为我在需要高质量随机数的领域进行研究: #include <random> double randomDouble(double bottom, double top) { std::uniform_real_distribution<double&

如果5+rand%6生成一个从5到10的随机数,我将如何生成十进制数?我尝试将一个浮点变量赋值为4+rand%8/100,但除了将变量赋值为零之外,这没有任何作用。

就我个人而言,我会选择比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);
}

有两种基本方法可以转换生成[0,rand_MAX]范围内数字的数字生成器rand,使其生成[a,b]范围内的数字:

n=兰特%b-a+1+a

n=兰特*b-a+1/兰特最大值+1+a

第二种方法适用于非整数a和b的范围


请记住,除了已经提到的随机数质量问题外,此生成器可能无法生成足够密集的目标范围覆盖。RAND_MAX的值越大,覆盖范围越密集。

尝试4+RAND%8/100.0。查找整数除法。谢谢!这就解决了。我有点怀疑这是否真的在quesiton中。@πάνταῥεῖ: 我回答了这个问题,如何在C++中生成0.04到0.11之间的随机数。我认为,从代码质量的角度来看,这是一个优于使用rand生成一个数字,然后对其进行乘除的解决方案。另外,如果rand的实现像我记忆中那样糟糕,这将生成更好的随机数来引导。我们需要解决质量问题。除了鼓励你问低质量的问题之外,这并不意味着你的答案不好。@πάνταῥεῖ: 在这一点上,我们大多数人都有足够的智慧去推断劣质的东西。这并不意味着答案是正确的。如果问题对未来的研究有用与否,请转向长期观点。
double foo = randomDouble(0.04, 0.11);