试图进行调整"两个数字的比率

时间:2013-08-20 13:51:37

标签: c++

我想这样做

我有两个数字,A和B,它可以是A大于或小于B.我想做什么:

  1. 将B与A

  2. 进行比较
  3. 如果他们的比例是一个范围的“ouside”,那么取一个随机数并将其添加到“A” - 现在检查他们的新比率是否符合条件

    0.95 < ratio < 1.05
    
  4. 如果没有,请尝试另一个随机。

  5. 我的问题是我遇到了无限循环......这就是我所做的:

    float ratio = A/B;
    
    if (ratio < 0.95  || ratio > 1.05) {
        do {
            // randomly take a negative or positive number
            float random_n = ((float)rand())/RAND_MAX - 0.50; 
            // get an even smaller step
            random_n *= 0.1;
            // add or subtract the random number (depending on its sign)
            A += random_n;
            // form the ratio again 
            ratio = A / B;
            cout << "lets see " << A  << "  " << B << "  " << ratio << endl;        
        }
        while (ratio > 0.95 || ratio < 1.05);
    }
    

3 个答案:

答案 0 :(得分:2)

条件应该是:

while (ratio <= 0.95 || ratio >= 1.05);

你得到了&#34;&lt;&#34;和&#34;&gt;&#34;混合。 比率 介于0.95和1.05之间,如果它小于或等于0.95或大于或等于1.05。

如果你记得如何否定一个连词,那么很容易避免这样的错误:

  

NOT (0.95 <比率<1.05)=== (0.95 <比率 AND 比率<1.05)= ===   [...]

规则是:将每个 AND 更改为 OR 并取消所有子表达式:

  

[...] ===( NOT (0.95&lt; ratio) OR NOT (比率&lt; 1.05))====   (0.95> =比率 OR 比率> = 1.05)===(比率&lt; = 0.95 OR 比率> = 1.05)

答案 1 :(得分:1)

你的do..while循环条件应该是

while(ratio <= 0.95 || ratio =>1.05)

答案 2 :(得分:0)

问题是你正在增加A并且永远不会改变B

仍然期望比率为(0.95,1.05)。这取决于A和B的初始值来打破循环。

尝试:

    B=rand()%RAND_MAX;

    do {
    A=rand()%RAND_MAX;
    ratio = A/B;
    cout<<"lets see "<< A  <<"  "<< B <<"  "<<ratio<<endl;        

   }while(ratio <0.95 || ratio>1.05);

然后根据您的需要将A和B除以10的幂。

在连续运行中使用srand(time(0))表示不同的随机值