找出表达式来评估循环

时间:2015-02-12 19:58:48

标签: c++

这是一个广泛的问题,具体的例子。我的问题是,你如何弄清楚如何在循环中评估算法或表达式?

在示例beblow中,我想出了如何使用循环来计算平方根,使用带有巴比伦算法的计数器,它似乎正常工作。

但我无法弄清楚如何在不使用计数器的情况下在.01范围内对此进行评估。我看到网上的其他人在没有柜台的情况下这样做,但这样做的能力使我无法做到。

这是我的柜台版本:

int count(20);

    while (count > 0 )
{
    if (guess <= (guess * p) + guess)
        prevGuess = guess;
    else
        r = input / guess;

    guess = (guess + r) / 2.0;
    count -= 1;
    cout << "\nGuess = " << guess;
}

我尝试过这样的事情:

while ((guess - lastGuess) / lastGuess)

while(guess - lastGuess * .01)

但我得到的只是一个互动或无限循环。

如何评估循环内任何算法的好方法是什么?

我并不仅仅意味着这个小程序,我的意思是任何事情,甚至像x + y = 2。

你会做点什么:

while(x + y !=2) {}

谢谢!

3 个答案:

答案 0 :(得分:2)

通常这种计算可以在下一次迭代没有多少改变时停止;例如

for(;;) {
    double next_v = (v + (n / v)) / 2;
    if (fabs(v - next_v) < eps) break; // We got there
    v = next_v;
}

其中eps是您在结果中所需的准确度。

答案 1 :(得分:1)

您需要将错误与确定的错误限制进行比较,而不是尝试将其与零进行比较。

你会用

 while (abs((guess - lastGuess) / lastGuess) > .01)

表示相对错误为.01和

while(abs(guess - lastGuess) > .01)

绝对的。

答案 2 :(得分:1)

在while(和每个循环)中有条件告诉程序何时停止它。这个条件必须是一些返回true或false值的表达式。更简单,它只是一个等式,或者给出明确答案的东西:真或假。在您的示例表达式中:((guess - lastGuess) / lastGuess)不返回true或false。它会返回一些数字等。 如果((guess - lastGuess) / lastGuess) == 4等于4,则((guess - lastGuess) / lastGuess)之类的表达式将返回true,否则返回false。此示例将起作用:while(x + y !=2)。程序将调用循环,直到x + y等于2.