C语言PTA问题求解

问题遇到的现象和发生背景

为什么low和high换个位置就错误?

问题相关代码,请勿粘贴截图
while(high-low>0){
    if(high-low<0.001){
        printf("%.2lf",(high+low)/2);
        break;
    }
    if(cal(low,a3,a2,a1,a0)*cal(high,a3,a2,a1,a0)<0){
        mid = (high+low)/2;
    }
    if(cal(mid,a3,a2,a1,a0)==0){
        printf("%.2lf",mid);
        break;
    }
    if(cal(low,a3,a2,a1,a0)*cal(mid,a3,a2,a1,a0)>0){   
        low = mid;
    }else{
        high = mid;
    }
 }
return 0;
运行结果及报错内容

img

img


   if(cal(low,a3,a2,a1,a0)*cal(mid,a3,a2,a1,a0)>0){    // 不是这个条件都去执行else, 然后你交换了low和high, 对于high  = mid 的条件你直接减少了
        low = mid;
    }else{
        high = mid;
    }

你可以参考下这篇文章:PTA 黑洞数 C语言