二分搜索--控制精度--hdu2199 Can you solve this equation

来源:互联网 发布:精灵虚拟光驱激活mac 编辑:程序博客网 时间:2024/05/21 07:10

1.要求4位小数,精度可以开得更高些

2.可以取得到的一般r - l >= eps,有等号

3.r = mid - eps,l = mid + eps往2边都取eps

4.最后退出的时候仍然取mid,(l + r) / 2;

#include <iostream>

#include <cstdio>

#include <cmath>

using namespacestd;

const double eps =1e-6;

double y;


double equation(double x)

{

    return (((8 * x +7) * x + 2) * x +3) * x + 6;

}

void solve(double y)

{

    if (y <6.0 || y > equation(100.0)) {

        printf("No solution!\n");

        return;

    }

    double l =0.0,r = 100.0;

    double mid =0;

    while (r - l >=eps) {

        mid = (l + r) / 2;

        if(equation(mid) > y)

            r = mid - eps;

        else l = mid +eps;

    }

    printf("%.4lf\n",(l + r) /2);

}

int main()

{

    int T;

    cin >> T;

    while (T --) {

        scanf("%lf",&y);

        solve(y);

    }

    return0;

}

阅读全文
0 0
原创粉丝点击