#include<iostream>
using namespace std;
float erfen1(float a, float b);
float erfen2(float a, float b);
float f1(float x);
float f2(float x);
int main()
{
cout << erfen1(0, 10000) << endl;
cout << erfen2(3, 4);
}
float erfen1(float a, float b)
{
float m;
//解位于(a,b)区间内,如果两者距离小于1.0*(1e-2)/2。那么a,b已经满足所需精度
for (; fabs(a - b) > 1e-2;)
{
m = (a + b) / 2;
//结果<1.0*(1e-2)/2,满足精度,直接输出
if (fabs(f1(m)) < 1e-2)return m;
//根据零点定理,若区间[a,b]内,有f1(a)*f1(b)<0,则解位于此区间
//解位于(a,m)
if (f1(a) * f1(m) < 0)b = m;
//解位于(m,b)
if (f1(m) * f1(b) < 0)a = m;
}
return a;
}
float erfen2(float a, float b)
{
float m;
for (; fabs(a - b) > 1e-3;)
{
m = (a + b) / 2;
if (fabs(f2(m)) < 1e-6)return m;
if (f2(a) * f2(m) < 0)b = m;
if (f2(m) * f2(b) < 0)a = m;
}
return a;
}
float f1(float x)
{
return x * x * x * x * x + 3 * x - 1;
}
float f2(float x)
{
return x * x * x - 2 * x * x - 4 * x - 7;
}