일원 3 차 방정식 해법

ax3 + bx2 + cx + d = 0  이런 1 원 3 차 방정식.이 방정식 의 각 계수 (a, b, c, d) 를 제시 합 니 다.  모두 실수) 이 방정식 은 세 개의 서로 다른 실 근 (뿌리의 범 위 는 - 100 에서 100 사이) 이 존재 하고 뿌리 와 뿌리의 차 이 는 절대 치 > = 1 이 라 고 약정 한다.작은 줄 에서 큰 줄 로 이 세 개의 실 근 (뿌리 와 뿌리 사이 에 빈 칸 이 남아 있 음) 을 순서대로 출력 하고 소수점 뒤의 두 자리 까지 정확하게 해 야 한다.알림: 방정식 f (x) = 0 을 기록 합 니 다. 2 개의 수 x1 과 x2 가 존재 하고 x1, f (x1) * f (x2) < 0 이 있 으 면 (x1, x2) 사이 에 반드시 하나의 뿌리 가 있 습 니 다.
입력 설명 입력 설명
3 차 방정식 의 각 계수
출력 설명 출력 설명
세 가지 해석
샘플 입력 샘플 입력
1   -5   -4   20
샘플 출력 샘플 출력
-2.00   2.00   5.00
#include 
#include 
double a=0,b=0,c=0,d=0;

double getF(double);
double search(double,double);

int main(void)
{
	double i=-100;   //i   -100   100,      
	double tmp=0,tmpi=-100,result=0;  //tmp        f(x) ,tmpi         i,result      
	scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
	tmp=getF(-100);
	for(i=-99;i<=100;i++){
	
		if(fabs(tmp*getF(i))<=1e-4){
			tmpi = i+1;
			tmp = getF(tmpi);
			printf("%.2lf ",i);
		}else if(tmp*getF(i)<0){
			printf("%.2lf ",search(tmpi,i));
			tmpi = i+1;
			tmp = getF(tmpi);
		}
	}
	return 0;
}
double search(double a,double b)
{
	double c = (a+b)/2;
	while(fabs(getF(c))>=1e-4)
	{
		if(getF(c)*getF(a)>0)
		{
			a = c;
		}
		else if(getF(c)*getF(b)>0)
		{
			b = c;
		}
		c = (a+b)/2;
	}
	return c;
}
double getF(double x)
{
	return a*x*x*x+b*x*x+c*x+d;
}

좋은 웹페이지 즐겨찾기