高中数学二分法求零点(也可以求导函数的零点=原函数的最大值)。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
typedef pair<int, int> P;
double qpow(ll base,ll pow){
double res=1;
while(pow){
if(pow&1){
res *= base;
}
pow >>= 1;
base *= base;
}
return res;
}
double fx(double x, double y)
{
return 6 * pow(x, 7) + 8 * pow(x, 6) + 7 * pow(x, 3) + 5 * pow(x, 2) - y * x;
}
double gx(double x, double y)
{
return 42 * pow(x, 6) + 48 * pow(x, 5) + 21 * pow(x, 2) + 10 * x - y;
}
int main()
{
int T;
cin >> T;
double y;
while(T--){
cin >> y;
if(gx(100,y)<=0)
{printf("%.4lf\n", fx(100, y));
continue;}
else{
double left = 0, right = 100;
double mid;
while ((right-left)>0.00001){
mid = (left + right) / 2;
if(gx(mid,y)>=0)
right = mid;
else
left = mid;
}
printf("%.4lf\n", fx(mid, y));
}
}
}