程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言 迭代法求一個數的平方根

C語言 迭代法求一個數的平方根

編輯:C語言問答

C語言 迭代法求一個數的平方根

10

用迭代法求 。求平方根的迭代公式為:Xn+1=(Xn+a/Xn)/2
 
要求前後兩次求出的得差的絕對值少於0.00001。

#include<stdio.h>
#include<math.h>
void main()
{
     float x0,x1,a;
      scanf("%f",&a);
     x1=a/2;
    do
{
    x0=x1;x1=(x0+a/x0)/2;   

}
    while(fabs(x0-x1)>=0.00001);   

     printf("%.3f",x1);

}

這個程序中為什麼把x1的初值賦值為a/2

 

還有什麼別的方法能編寫出這個問題 請提供

謝謝

最佳回答:

因為上面的算法使用的是函數f(x)=x^2-c,求根;

所以要想使牛頓迭代的序列收斂於c,則,必須滿足f(x0)=x0^2-c>0;

所以一般情況下,取x0大於等於根號c都可以。

這個是逼近理論的內容了。具體證明你查資料吧。

求根好的算法很多的·給你一個快速算法:

#include<stdio.h>
#include<math.h>
float SquareRootFloat(float number) {
    long i;
    float x, y;
    const float f = 1.5F;
 
    x = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;
    i  = 0x5f3759df - ( i >> 1 );
    y  = * ( float * ) &i;
    y  = y * ( f - ( x * y * y ) );
    y  = y * ( f - ( x * y * y ) );
    return number * y;
}

void main()
{
     float x0,x1,a;
      scanf("%f",&a);
     printf("%.8f",SquareRootFloat(a));

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved