求一个正整数N的开方,要求不能用库函数sqrt(),结果的精度在0.001

来源:互联网 发布:淘宝客服介绍 编辑:程序博客网 时间:2024/05/16 04:48

        用牛顿迭代法求解:

       设其平方根为x,则有x2=a,即x2-a=0。设函数f(x)= x2-a,在曲线上任取一点(x0,f(x0)),其中x0≠0那么曲线上该点的切线方程为

                             (1-1)

       求该切线与x轴的交点( 即取 f(x)=0 代入上式 )得

                            (1-2)

       初值不能取0,然后再循环中加上绝对值判断即可。

代码如下:

int main(int argc, char* argv[]){int N;  cin>>N  ;double x1 = 1;//初值  double x2 = x1/2.0+N/2.0/x1;  while( fabs(x2-x1)>0.001)  {  x1 = x2;  x2 = x1/2.0+N/2.0/x1;  }  cout<<x1<<endl;  system("pause");return 0;}
0 0
原创粉丝点击