NOI的1.1的02:二分法求函数的零点不会做

NOI的1.1的02:二分法求函数的零点不会做
原题在http://noi.openjudge.cn/ch0111/02/
以下是我自己的代码

#include
#include
#define esp 0.0000000001
using namespace std;
double f(double x){
    int t=pow(x,5.0)-15*pow(x,4.0)+85*pow(x,3.0)-225*x*x+274*x-121;
    return t;
}
int main(){
    double mid,left=1.5,right=2.4;
    while(1){
        mid=(left+right)/2;
        if(f(mid)<=esp&&f(mid)>=-esp) {
            printf("%.6lf",mid);
            return 0;
        }
        else if(f(mid)>0) right=mid;
        else left=mid;
    }
}

又是二分法啊,mid 计算的时候应该是 mid = left + (right-left+1)/2
f函数的返回值t 改成double类型
精确值0.000001就可以了

函数里的t应该用double,不能用int
后面的二分比较方法也不太合适。修改如下:

#include<iostream>
#include<math.h>
#define esp 0.0000000001
using namespace std;
double f(double x){
    double t=pow(x,5.0)-15*pow(x,4.0)+85*pow(x,3.0)-225*x*x+274*x-121;
    return t;
}
int main(){
    double mid,left=1.5,right=2.4;
    while(1){
        double l = f(left);
        mid=(left+right)/2;
        if(f(mid)<=esp&&f(mid)>=-esp) {
            printf("%.6lf",mid);
            return 0;
        }
        else if(f(mid)*l<0 ) right=mid;
        else left=mid;
    }
}
 

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632