我一直在使用Babylonian平方根算法,从我的编程类介绍中分配。 该程序工作正常,并提供非常准确的答案。我的问题源于行中发生的奇怪事情(猜测!=结果) 我写了这句话来检查这两个术语,并且一旦它们相同,就打破循环。但是,如果您输入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;
}
}
答案 0 :(得分:2)
&#34;猜&#34;和&#34;结果&#34;是&#34;双&#34;类型,它具有比默认cout浮点数字显示长度更高的精度。
你认为数字是相同的,但事实并非如此。从小数点开始,你可以看到差异。解决方案1:将cout十进制数显示范围更改为更长的值,以便您可以看到数字实际上是不同的,因此while循环没有中断。
在代码开头使用cout.precision(17);
。
解决方案2:更改guess&amp;的数据类型结果为&#34;浮动&#34;