【发布时间】:2017-02-16 00:01:37
【问题描述】:
所以我把这个作为家庭作业。我知道有很多方法可以让这段代码更高效、更准确,但这是我的教授希望它完成的方式。
我遇到了循环问题。当我要求 67 的平方根时,它确实找到了它,但它循环正确答案 3 次。
Enter a value to be square rooted:
67
33.5
guess = 17.75
guess = 10.7623
guess = 8.49387
guess = 8.19096
guess = 8.18535
guess = 8.18535
guess = 8.18535
The program took 7 guess to find an estimation.
当我试图找到 5 的平方根时,它找到但继续无限循环
using namespace std;
int main()
{
double guess2;
double squarenumber;
double guess1;
int numofguess = 0;
cout << "Enter a value to be square rooted: " << endl;
cin >> squarenumber;
guess1 = squarenumber/2;
cout << guess1 << endl;
do
{
guess2 = (guess1 - (((guess1 * guess1) - squarenumber)/(2* guess1)));
guess1 = guess2;
cout << "guess = " << guess2 << endl;
numofguess = numofguess + 1;
} while ((guess2 * guess2) > squarenumber);
cout<< "The program took "<< numofguess <<" guess to find an estimation.";
return 0;
}
【问题讨论】:
-
在调试器中逐行执行代码时,您观察到了什么?
-
尝试每次循环打印
guess2 * guess2。确保以大量的精度打印它。 -
双精度数包含超过 6 个十进制数字,因此您未显示的数字可能存在差异。查看此帖子Is floating point math broken?
-
打印精度是这里的问题
标签: c++ loops square-root