C语言 迭代法求一个数的平方根
用迭代法求。求平方根的迭代公式为:Xn+1=(Xn+a/Xn)/2要求前后两次求出的得差的绝对值少于0.00001。#include<stdio.h>#include<m...
用迭代法求 。求平方根的迭代公式为: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 还有什么别的方法能编写出这个问题 请提供谢谢 展开
要求前后两次求出的得差的绝对值少于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 还有什么别的方法能编写出这个问题 请提供谢谢 展开
1个回答
2013-11-23
展开全部
因为上面的算法使用的是函数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));}
#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));}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询