我编码的程序应该找到给定double的根。
条件是:你不允许使用while和for循环。不允许任何类型的循环。
我们的教授说禁止使用stdlib
函数sqrt()
。
我开始编码,但它仍然无法正常工作。希望任何人都可以提供帮助。
#include <cstdlib>
#include <iostream>
using namespace std;
double mysqrt(double a, double b, double c);
int main(int argc, char** argv) {
double dBegin{0};
double dOldroot{0};
double dNewroot{0};
double a{0};1
cin >> dBegin;
dOldroot = dBegin;
mysqrt(a, dOldroot, dNewroot);
cout << dNewroot;
return 0;
}
double mysqrt(double a, double b, double c) {
c = (b + (a / b)) / 2.0;
if (a != 8) {
c = mysqrt(a++, b, c);
}
return c;
}
答案 0 :(得分:1)
我正在使用 Newton-Raphson的方法找出给定数字的平方根num
(在我的代码中)。
您可能会发现此视频链接很有用:Click Here。使用这个算法我已经解决了这个问题。
这是我的代码。
#include <iostream>
using namespace std;
/* we are gonna use Newton-Raphson's method to find its square because
it converges quickly, even calculators use this algo. to find the sqr-root */
double find_sqrt(double x, int num, int count) {
if(count == 0)
return x;
double f_x = x*x - num;
double f_dx = 2*x;
double res = x - (f_x/f_dx);
x = find_sqrt(res, num, count -1);
return x;
}
int main() {
double num;
cin >> num;
/* Here 20 is the maximum number of times it will run and
num/2 is the random number send to the function between the range 1 to num */
cout << find_sqrt(num/2, num, 20);
return 0;
}
结果可能不太精确,但它总是几乎接近数字的实际平方根 原因:浮动精度错误。我必须知道这一点我相信。
答案 1 :(得分:0)
1
double a{0};
double
作为计数器也不是一个好主意。mysqrt
中main()
返回的值。修复这些错误,您的代码将是这样的:
#include <cstdlib>
#include <iostream>
using namespace std;
double mysqrt(int a, double b);
int main(int argc, char** argv) {
double dBegin{0};
double dOldroot{0};
double dNewroot{0};
int a{0};
cin >> dBegin;
dOldroot = dBegin;
dNewroot = mysqrt(a, dOldroot);
cout << dNewroot;
return 0;
}
double mysqrt(int a, double b) {
double c = (b + (a / b)) / 2.0;
if (a != 8) {
c = mysqrt(a + 1, b);
}
return c;
}
此代码无法计算平方根,但在运行时很快编译并退出。