
#include <stdioh>
#include <mathh>
void main()
{
double x1,x2=10,a;
printf("请输入a:");
scanf("%lf",&a);
do
{
x1=x2;
x2= (x1 + a/x1) / 2; //迭代的实质是循环
}while(fabs(x2-x1)>1e-1);
printf("结果为:%2f\n",x2);
}
我找了一段正确的程序,如下:
注意看,它的判断条件跟你的是不同的,还有就是你的代码,一开始x1=0的话,x2=2/3x1+a/(3x1x1); 分母为0了,当然出错了。
求立方根的牛顿法基于如下事实,如果y是x的立方根的一个近似值,那么下式将给出一个更好的近似值:
(x/y2+2y)/3
代码:
#include<stdioh>
#include <mathh>
float fun(float guess,float x)
{
if(abs(guessguessguess-x)<00000001) return guess;
else
return fun((x/guess/guess+2guess)/3,x);
}
int main()
{
float a,b;
while(scanf("%f%f",&a,&b))
printf("%f\n",fun(a,b));
}
//a表示你猜测b的立方根大概等于几
float mysqrt(float a)
{
float x = a/2;
float d = 10000;
while ( d>1e-5 || d<-1e-5)
{
d = x;
x = (x + a/x) /2 ;
d -= x;
}
return x;
}
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
#include "iostreamh"
#include "mathh"
void main()
{double a,x,y;
cin>>a;
x=a/2;
y=2/(3x)+a/(3xx);
do{x=y;
y=2/(3x)+a/(3xx);
}while(fabs(x-y)>=10e-5);
cout<<x<<endl;
}
已知公式为y=2/(3x)+a/(3xx);求A的立方根,这条程序错在哪呀?
解析:
公式错了
正确是: y=(x+x+a/(xx))/30;
另外,应该考虑a=0的特殊情况,否则会出现除数是0的例外
以上就是关于C语言:用迭代法求 x=根号a。全部的内容,包括:C语言:用迭代法求 x=根号a。、C++用迭代法求立方根、C语言,用迭代法求x=根号下a等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)