다항식의 근원을 찾기 위해 이분법 알고리즘을 쓰고 있습니다. FP가 0이거나 절대 값이 b-a
이라면 내 코드의 두 번째 부분에서 if 문을 깨뜨린 것입니다.C에서 루프를 벗어나는 방법
for 루프 (반복)를 완전히 멈추고 p를 반환하도록 프로그램을 설정합니다. 그리고 마지막으로 솔루션을 얻는데 걸리는 반복 횟수를 출력하고 싶지만 내 printf 문을 사용하면 분명히 프로그램이 루트 (영)가 얻어 졌다는 생각조차도 계속 실행한다는 것을 알 수 있습니다.
전체 메커니즘을 중지하고 0 인 p 값과 정확한 반복 횟수를 반환하는 방법에 대한 아이디어가 있습니까? 당신이 break
문 앞에 return p;
을 가지고 있기 때문에 감사
double computeroots(double a, double b, double epsilon, int MaxIter)
{
double FA = pow(a,4) -4*a + 1;
double FB = pow(b,4) - 4*b + 1;
double FP;
double p;
int i;
for(i=0;i<MaxIter;i++) {
if(FA * FB < 0) {
p = a + (b-a)/2;
FP = pow(p,4) - 4*p +1;
if(FP == 0 || abs(b-a) < epsilon) {
return p;
break;
} else if (FA * FP >0) {
a =p;
FA = FP;
} else {
b = p;
FB = FP;
}
i++;
}
}
printf("the number of iterations is : %d\n", i);
}
의 두 번째 점진을 제거하지만 확실히 오해의 소지가 있습니다. 하나의 루프 만 있고 외부 루프와 중첩 루프는 없습니다. –
당신은'i'를 두번 증가 시켜서 반복의 절반 만 실행합니다. –