不是很清楚用接近于0的值,比如1e-10代替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{
       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语言了,希望对你有帮助