欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1241:二分法求函数的零点

程序员文章站 2024-03-20 12:50:58
...

 

【题目描述】

有函数:f(x)=x5−15x4+85x3−225x2+274x−121

 

已知f(1.5)>0,f(2.4)<0

且方程f(x)=0 在区间[1.5,2.4

] 有且只有一个根,请用二分法求出该根。

【输入】

(无)

【输出】

该方程在区间[1.5,2.4

]中的根。要求四舍五入到小数点后6

位。

【输入样例】

(无)

【输出样例】

(无)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
#include <map>
#include <cstdlib>
#define sf(a) scanf("%d\n",&a)
#define pf(a) printf("%.6lf ",a)
#define E 1e-8
#define ms(a) memset(a,0,sizeof a)
#define rep(a,b,c) for(a=b;a<=c;a++)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const int idata=1e5+5;
ll minn=inf,maxx=-inf;
ll n,ans,t,k;
char *ch;
int *step;
int cnt;
ll temp[idata];
priority_queue< int,vector<int>,greater<int> >q;
pair<int,int>p[idata];
int flag;

double f(double x)
{
    return x*x*x*x*x-15*x*x*x*x+85*x*x*x-225*x*x+274*x-121;
}
int main()
{
    double l=1.5,r=2.4;
    double mid=(l+r)/2;
    while(r-l>E)
    {
        if(f(mid)>0)
            l=mid;
        if(f(mid)<0)
            r=mid;
            mid=(l+r)/2;
    }
    pf(mid);
    return 0;
}