【发布时间】:2014-09-22 03:24:59
【问题描述】:
我在整个互联网上彻底搜索了这个主题,线程要么死了,要么使用了与我书中描述的不同的方法。
例如,http://www.geeksforgeeks.org/square-root-of-a-perfect-square/。这对我不起作用,因为我的算法需要循环直到达到最后“猜测”的 1%。
这是文中的问题。
计算数字 n 平方根的巴比伦算法如下:
- 猜测数字(您可以选择 n/2 作为初始猜测)。
- 计算 r = n / 猜测
- 设置guess = (guess + r) / 2
- 返回步骤 2 进行尽可能多的迭代。步骤 2 和 3 重复的次数越多,猜测就越接近 n 的平方根。
编写一个程序,为 n 输入一个整数,遍历 巴比伦算法,直到猜测在前一个猜测的 1% 以内, 并将答案输出为双精度数。
我写了以下代码:
#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 的正确答案,但循环并未终止,尽管对 lastGuess 的猜测大于 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
....
根 (r) 是正确的 (12)。猜测比 lastGuess (12
【问题讨论】:
标签: c++ algorithm square-root