计算C ++的随机数

时间:2010-10-22 09:29:29

标签: c++ random

这可能是一个非常简单的问题,但我只是想在做之前做出10000%的肯定。 基本上我正在为一个程序做一个公式,它需要一些特定的值,并在它们做的事情......等等。

无论如何让我说我有一些名为:

N
Links_Retrieved
True_Links
True_Retrieved.

我也有一个%“标量”生病,这个例子可以说%标量是10%。

检索到的链接总是N的一半,因此很容易计算。 但是我希望True_Links能够在1-10%的Links_Retrieved中占据任何地位。

然后我希望True_Retrieved可以从The True_Links到LinksiRetrieved的15%。 我该怎么做?它会是什么样的

True_Link=(((rand()%(Scalar(10%)-1))+1)/100);

? 我将除以100得到“百分比”值IE .1所以从.01到.1之间的任何地方?

并且执行True_retrieved它将是

True_Retrieved=(rand()%(.15-True_Link))+True_Link;
我这样做是正确的还是我很开心? 感谢

3 个答案:

答案 0 :(得分:2)

rand()是一个非常简单的随机数生成器。 Boost库包括Boost.Random。除了随机数生成器之外,Boost.Random还提供了一组类来生成特定的分布。听起来你想要一个随机介于1%和10%之间的分布,即0.010.1。这是用boost::random::uniform_real(0.01, 0.1)完成的。

答案 1 :(得分:0)

使用像Mersenne Twister这样的高级随机生成器可能会更好。

答案 2 :(得分:-1)

rand()生成介于0.0和1.0之间的值,您必须将该输出缩放到所需的时间间隔。要获得介于0.01和0.1(1%-10%)之间的值fact1,您需要:

perc1 = (rand()/RAND_MAX)*9.0+1.0; //percentage 1-10 on the 0-100 scale
fact1 = perc1/100.0;  //factor 0.01 - 0.1 on the 0-1 scale

获取perc1和0.15之间的值:

percrange = (15.0 - perc1);
perc2 = (rand()/RAND_MAX)*percrange + perc1;
fact2 = perc2/100.0;

所以你的价值观会变成:

True_Links = fact1*Links_Retrieved;
True_Retrieved = fact2*Links_Retrieved;

这是一种伪代码。您应该确保parc1, perc2, fact1, fact2percrange是浮点值,最后的乘法是以浮点形式完成的,并舍入为整数。