70,040
社区成员
发帖
与我相关
我的任务
分享#include<stdio.h>
#include<math.h>
float fun(float x)
{
return x*x+2*x;
}
int main()
{
float x1,x2,x,precision=1e-2;
while(1){
printf("enter two num:");
scanf("%f %f",&x1,&x2);
if(fun(x1)*fun(x2)<0) break;
}
while(fabs(x1-x2)>precision)
{
printf("there\n");
x=x1-fun(x1)*(x1-x2)/(fun(x1)-fun(x2));
if(fun(x1)*fun(x)>0)
x1=x;
else x2=x;
}
printf("root :%f\n",x);
}

两张图分别是输入输入-1 1和输入-10 -1的的结果,散列数分别是计算次数,x,和x1-x2。从第一张图可以看出,x从0的左侧无限趋近于0,这时x1=x=(-0),-0表示0的左极限,所以|x1-x2|=(+1),所以一直不能跳出循环,直到x=(+0)才结束。当输入-10 -1 时,x一直等于-2的左极限,所以|x1-x2|=(+8),同样不能结束循环。建议你把收敛条件换成fun(X)与0的差值或者两次计算前后x的差值试试。