因为是单调递减函数,用小白里面的非线性方程求根知识,二分法进行求解。
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
double p, q, r, s, t, u;
double m = 0, x = 0, y = 1, result;
double Cal(double m)
{
return p * exp(-m) + q * sin(m) + r * cos(m) + s * tan(m) + t * m * m + u;
}
int main()
{
//freopen("input.txt", "r", stdin);
while (~scanf("%lf%lf%lf%lf%lf%lf", &p, &q, &r, &s, &t, &u))
{
if (Cal(0) < 0 || Cal(1) > 0)
{
printf("No solution\n");
continue;
}
m = 0, x = 0, y = 1, result;
while (fabs(y - x) > 1e-10)
{
m = x + (y - x) / 2;
result = Cal(m);
if (result < 0)
y = m;
else
x = m;
}
printf("%.4f\n", m);
}
return 0;
}