这是一个广泛的问题,具体的例子。我的问题是,你如何弄清楚如何在循环中评估算法或表达式?
在示例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) {}
谢谢!
答案 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.