这可能是一个非常简单的问题,但我只是想在做之前做出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;
我这样做是正确的还是我很开心?
感谢
答案 0 :(得分:2)
rand()
是一个非常简单的随机数生成器。 Boost库包括Boost.Random。除了随机数生成器之外,Boost.Random还提供了一组类来生成特定的分布。听起来你想要一个随机介于1%和10%之间的分布,即0.01
和0.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, fact2
和percrange
是浮点值,最后的乘法是以浮点形式完成的,并舍入为整数。