#include <stdio.h>
#include<math.h>
int main()
{
double left=-2,right=-1,mid,f1,f2,f;
mid=(left+right)/2;
f1=pow(left,5)+3*pow(left,3)+7;
f2=pow(right,5)+3*pow(right,3)+7;
f=pow(mid,5)+3*pow(mid,3)+7;
do{
mid=(left+right)/2;
f=pow(mid,5)+3*pow(mid,3)+7;
if(f1*f<0)
{
right=mid;
f2=f;
}
else
{
left=mid;
f1=f;
}
}while(fabs(f)>=1e-5);
printf("%.10f",mid);
return 0;
}
这两个代码是因为什么结果不同呢?
#include <stdio.h>
#include<math.h>
int main()
{
double left=-2,right=-1,mid,f1,f2,f;
mid=(left+right)/2;
f1=pow(left,5)+3*pow(left,3)+7;
f2=pow(right,5)+3*pow(right,3)+7;
f=pow(mid,5)+3*pow(mid,3)+7;
do
{
if(f1*f<0)
{
right=mid;
f2=f;
mid=(right+left)/2;
}
else
{
left=mid;
f1=f;
mid=(right+left)/2;
}
}while(fabs(f)<=1e-10);
printf("%.10f",mid);
return 0;
}
一个大于等于,一个小于等于,为啥你认为结果应该一样啊?
第二段代码循环中都没有改变f的值啊,要么死循环,要么就干一次
f=pow(mid,5)+3*pow(mid,3)+7;
这个语句在第一个程序的循环里每次循环都执行一遍。f的值每次循环都会改变。
第二个程序f的值就没变过。
很久没看C语言了,希望对你有帮助