我一直在使用巴比伦平方根算法,这是我在编程课程介绍中的一项作业。该程序运行良好,并给出相当准确的答案。我的问题源于行中发生的一些奇怪的事情(而guess != result)我写while语句是为了检查这两项,一旦它们相等,就终止循环。但是,如果您输入50作为起始数字,循环将在爆发之前检查两个相同的数字三次,而不是一次。这是因为有更多的数字在后台处理,双数据类型不能显示吗?我知道double可以到小数点后15位。我希望我的措辞是可以理解的,如果有人需要澄清就问。PS-如果有人有提示,以帮助使我的代码更干净,请让我知道,我正在努力学习如何格式化我的代码是尽可能可读的。
#include <iostream>
using namespace std;
int main()
{
double input, // Users number
guess = 2, // First guess, always 2 at beginning
result, // altered guess, becomes guess 1 when repeated
r; // input divided by guess
int steps = 1, // keeps track of step number, for debugging
loop = 1; // controls continue loop
string error_1 = " Warning: input is negative, please pick a new one";
while (loop == 1)
{
cout << "--Babylonian Square Root Algorithm--" << endl;
cout << "Type a positive number to find its square root: ";
cin >> input;
if (input >= 0)
{
while (guess != result) // test here for within 1%
{
r = input / guess;
result = (guess + r) / 2;
// DEBUG
cout << "-------" << endl;
cout << " Step # " << steps << endl;
cout << "-------" << endl;
cout << " R) " << r << endl;
cout << " Guess) " << guess << endl;
cout << " Result) " << result << endl;
steps++;
guess = result;
result = (guess + r) / 2;
cout << result << " is the approximate square root of " << input << endl;
//DEBUG
cout << " Steps required: " << steps - 1 << endl;
}
else
{
cout << error_1 << endl;
}
cout << "Continue? (Yes = 1, No = 0)" << endl;
guess = 2;
result = 0;
steps = 1;
cin >> loop;
cout << "------------------------------------------------------" << endl;
}
return 0;
}
}
"guess"one_answers"result"是"double"类型,它具有比默认cout浮点数显示长度更高的精度。
你认为这些数字是相同的,但它们不是。从小数点往远处看,你就能看到差别。
解决方案1:将cout十进制数字显示范围更改为更长的值,以便您可以看到数字实际上是不同的,因此while循环不会中断。在代码开头使用cout.precision(17);
解决方案二:更改guess &