题意:
给出的方程式,求出其解;
做法:二分法,本来的区域范围是0-1,一直压缩到esp的区域内;
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
#define esp 1e-9
int p,q,r,s,t,u;
double cal(double x) {
return (p*exp(-x) + q*sin(x) + r*cos(x) + s* tan(x) + t*x*x + u);
}
void solve() {
double x = 0, y = 1;
double m,k;
double f1 = cal(x);
double f2 = cal(y);
if (f1*f2 > 0) printf("No solution\n");
else {
while (y - x > esp) {
m = x + (y - x) / 2;
k = cal (m);
if (k < 0) y = m; // 求导之后可以知道他是单调递减的,因此k < 0,要复制给y
else x = m;
}
printf("%.4lf\n",m);
}
}
int main () {
while (scanf("%d %d %d %d %d %d",&p,&q,&r,&s,&t,&u) != EOF) {
//printf("%d %d %d %d %d %d\n",p,q,r,s,t,u);
solve();
}
return 0;
}