我在互联网上仔细搜索了这个主题,帖子要么已经过期,要么使用的方法与我书中描述的不同。
例如:http://www.geeksforgeeks.org/square-root-of-a-perfect-square/。此链接中提供的方法对我无效,因为我的算法需要循环直到达到上一“猜测”的1%。
以下是文本中的问题:
巴比伦算法计算数字n的平方根如下:
我已编写以下代码:
该程序计算出了r的正确答案,但是循环并没有终止,尽管猜测值大于上一次猜测值加1%。当输入144作为n时,该程序会产生以下输出。
根据当前猜测的结果(小于上一次猜测结果),条件判断应该返回false,以此来结束循环,但是循环却没有结束。请问原因是什么?根(r)是正确的(12)。猜测结果比上一次猜测结果少(12<12.12)。
例如:http://www.geeksforgeeks.org/square-root-of-a-perfect-square/。此链接中提供的方法对我无效,因为我的算法需要循环直到达到上一“猜测”的1%。
以下是文本中的问题:
巴比伦算法计算数字n的平方根如下:
- 猜测一个数字(初始猜测值可以选取n / 2)。
- 计算r = n / guess。
- 设置guess =(guess + r)/ 2。
- 返回步骤2,直到满足条件。重复第2和第3步的次数越多,guess将越接近n的平方根。
我已编写以下代码:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main()
{
int n;
double r, guess(4), lastGuess;
cout << "Enter a number to find the square root of: ";
cin >> n;
do
{
r = n / guess;
lastGuess = guess;
guess = ( guess + r ) / 2;
// cout <<"Guess: " << guess << endl;
// cout <<"Last Guess: " << lastGuess << endl;
cout << "Guess : " << guess << endl;
cout << "Last Guess 1% = " << lastGuess + ( lastGuess * 0.01 ) << endl;
cout << "r = " << r << endl;
} while( guess >= lastGuess * 0.01 );
cout << r;
return 0;
}
该程序计算出了r的正确答案,但是循环并没有终止,尽管猜测值大于上一次猜测值加1%。当输入144作为n时,该程序会产生以下输出。
....
r = 12
Guess : 12
Last Guess 1% = 12.12
r = 12
Guess : 12
Last Guess 1% = 12.12
r = 12
Guess : 12
Last Guess 1% = 12.12
r = 12
Guess : 12
Last Guess 1% = 12.12
....
根据当前猜测的结果(小于上一次猜测结果),条件判断应该返回false,以此来结束循环,但是循环却没有结束。请问原因是什么?根(r)是正确的(12)。猜测结果比上一次猜测结果少(12<12.12)。