c 牛顿法求近似值问题 vc6.0 无error 但是不出结果 请问是哪里出了问题?

include"stdio.h"
include"math.h"
double rot(double x,double a,double b,double c,double d)
{
    double f,f1;
    do
    {
        f=a*x*x*x+b*x*x+c*x+d;
        f1=3*a*x*x+2*b*x+c;
        x=x-f/f1;
    }while(fabs(x-1)>1e-6);
    return x;
}
int main()
{
    double a,b,c,d;
    printf("输入a,b,c,d:\n");
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    printf("%f",rot(1.1,a,b,c,d));
    return 0;
}

卡在这里,无输出...本人新手

阅读 3.8k
1 个回答
新手上路,请多包涵

把fabs(x - 1) > 1e - 6 改成 x - 1 > 1e - 6就能出结果,因为迭代的时候收敛很快,很可能越过你给的范围.
另外,我想说一下,即使这么改,答案也不准确,因为你不能保证迭代的时候在x == 1时一定收敛。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进