用迭代法求 。求平方根的迭代公式為: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));
}