#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
double a, b, c, d;
double x1, x2;
double asw;
void figure_X(){
double delta = sqrt(4 * b * b - 12 * a * c); //导函数的delta
x1 = (-2 * b - delta) / (6 * a); //左零点
x2 = (-2 * b + delta) / (6 * a); //右零点
}
double figure_F(double x){
return a * x * x * x + b * x * x + c * x + d; //计算函数值
}
//二分循环写法
double search_loop(double left, double right){
double mid = 0;
while(right-left>=0.001){
mid = (right + left) / 2;
if(figure_F(mid)*figure_F(right)<=0)
left = mid;
else
right = mid;
}
return right;
}
//二分递归写法
void search_recursion(double left, double right){
double mid = 0;
if(right-left>=0.001){
mid = (left + right) / 2;
if(figure_F(mid)*figure_F(right)<=0)
search_recursion(mid, right);
else
search_recursion(left, mid);
}
else
asw = right;
}
int main(){
cin >> a >> b >> c >> d;
figure_X();
/* cout << fixed << setprecision(2)
<< search_loop(-100, x1) << " "
<< search_loop(x1, x2) << " "
<< search_loop(x2, 100) << endl;*/
search_recursion(-100, x1);
cout << fixed << setprecision(2)
<< asw << " ";
search_recursion(x1, x2);
cout << asw << " ";
search_recursion(x2, 100);
cout << asw << endl;
return 0;
}
Luogu P1024 [NOIP2001 提高组] 一元三次方程求解
最新推荐文章于 2024-07-24 22:13:06 发布