这是一道基础二分题。
个人总结
1.找范围很关键,很多时候题中没有明确给出
2.二分法一定是每次范围缩小一倍
关键都写在注释里了
//方程求解
#include <iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double BinarySearch(double left, double right)
{
double mid;
double f;
while(right - left > 1e-11){ //因为是浮点型
mid = left+(right-left)/2;
f = mid*mid*mid-5*mid*mid+10*mid-80;
if(f < 0)
left = mid;
else
right = mid;
}
return mid;
}
int main()
{
//这道题用到了一定的数学知识,高中知识足矣
/*1.对原式求导得3x^2-10x+10
2.由求根公式b^2-4ac<0得出该方程无解,即恒大于0
3.导数恒大于0,得出原函数单调递增
4.寻找二分查找的数据范围,从0开始依次带入发现,f(5)=-30<0,f(6)=16>0
5.即答案一定在5和6之间*/
printf("%.9lf\n",BinarySearch(5.0,6.0));
return 0;
}