6-28 牛顿迭代求平方根 (10分)
6-28 牛顿迭代求平方根 (10分)
用牛顿迭代法求非负整数的平方根。 使用1作为猜测的初始值,不要对0做特别判断。
函数接口定义:
double ntsqrt(int x, double eps);
x:要求平方根的非负整数; eps:当求得的平方根的平方与x的差小于eps值停止迭代。
裁判测试程序样例:
#include <stdio.h>
double ntsqrt(int x, double eps);
int main()
{
int x;
double eps;
scanf("%d %lf", &x, &eps);
printf("%.4f", ntsqrt(x, eps));
return 0;
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
319 0.01
输出样例:
在这里给出相应的输出。例如:
17.8606
代码讲解:这道题很经典,首先求平方根求法我能想到的有俩种办法,第一种是二分法,利用二分法求出平方根,第二种方法就是这个迭代平方根法。
这种办法是这样的 设f(x)=x2-n n是一个常数就是我们要求的那个数的平方。对于f(x)来说只要我们求出让f(x)=0 x的值就结束了。当然我们可以一点一点试但是这样的复杂度是非常高的。
我们利用这个函数在某个(x,f(x))切线和x轴的交点 作为新的x值继续迭代,直到俩个x已经非常接近了 那么x值就已经找到了
double ntsqrt(int x, double eps)
{
double s=1;
double x2=(s+x/s)/2.0;
double diff=x2*x2-x;
if(diff<0)
diff=-diff;
while(diff>eps)
{
s=x2;
x2=(s+x/s)/2;
diff=x2*x2-x;
if(diff<0)
diff=-diff;
}
return x2;
}

浙公网安备 33010602011771号