- 一元三次方程求解
- 2016-07-22 13:39:57 @
#include<iostream>
#include<cstdio>
using namespace std;
double a,b,c,d;
int top=1;
double x[5]={0};
double fun(double s){
return a*s*s*s+b*s*s+c*s+d;
}
void search(double s,double t){
if((t-s)<0.001){
x[top++]=s;
return;
}
if(fun(s)*fun(t)<0){
double mid=(s+t)/2;
if(fun(s)*fun(mid)==0){
x[top++]=mid;
return;
}
else if(fun(s)*fun(mid)<0){
search(s,mid);
}
else if(fun(mid)*fun(t)<0){
search(mid,t);
}
}
}
int main(){
int i;
cin>>a>>b>>c>>d;
for(i=-100;i<=100;i++){
if(top==4) break;
if(fun(i)*fun(i+1)<0){
if(fun(i)*fun(i+0.5)<0){
search(i,i+0.5);
}
else if(fun(i+0.5)*fun(i+1)<0){
search(i+0.5,i+1);
}
}
else if(fun(i)*fun(i+1)==0){
if(fun(i)==0){
x[top++]=i;
}
}
}
for(i=1;i<=3;i++){
printf("%.2f ",x[i]+0.005);
}
return 0;
}