首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这段代码错哪了,为什么加abs侯结果不一样

2012-02-27 
这段代码哪里错了,为什么加abs侯结果不一样?下面是用牛顿迭代法解方程x*x*x-2x-50的程序代码这段代码哪里

这段代码哪里错了,为什么加abs侯结果不一样?
下面是用牛顿迭代法解方程x*x*x-2x-5=0的程序代码这段代码哪里错了,为什么加abs侯结果不一样?
main()
{
  float   f(float   x);
  float   df(float   x);
  float   x1,x;
  int   n;
  x1=3;x=2;n=0;
  while(x1-x> 0.000001)           /*     改为abs(x1-x)后结果不一样     */
    {
      x1=x-f(x)/df(x);
      x=x1;
      n++;
      printf( "%f\n ",x1);
    }
  printf( "%f\n ",x1);
  printf( "%d\n ",n);
  system( "pause ");
}

float   f(float   x)
{
  float   f;
  f=x*x*x-2*x-5;
  return   f;
}

float   df(float   x)
{
  float   df;
  df=3*x*x-2;
  return   df;
}

[解决办法]
因为你一个循环下来,x肯定等于x1了,那么就跳出循环了。你应该这么改:

while(abs(x1-x)> 0.000001)
{
x=x1; //先保存x1的值
x1=x-f(x)/df(x);

n++;
printf( "%f\n ",x1);
}
x=x1; //获得更准确的值

热点排行