본문 바로가기

춤추는 프로그래머/C, C++

수치해석에서 반분법.



과제인데, 이런 간단한 프로그래밍이 왜... -_-
책에 나와있는 반분 코드를 고대로 썼는데 뭔가 잘못된 모양이다.
모든 루트값이 0와 10을 넣었을때 5가 되어버림. ㄷㄷㄷ




//---------------------------------------------------------------------------
//------------ 1에서 50까지의 제곱근을 반분법으로 구합니다. ----------------
//---------------------------------------------------------------------------

#include <stdio.h>
#include <math.h>
#define f(x) (x)*(x);

main()
{
 int n = 50;  //반분할 때 루프를 도는 max값.
 int i;
 float x1, x2, x3, f1, f2, f3;


 printf("두 시점을 작은 수 부터 입력해 주세요 : ");
 scanf("%f %f", &x1, &x2);
 
 for (i=0; i<50; i++)
 {
  f1 = f(x1)-i-1;
  f2 = f(x2)-i-1;
 
  do  {
   x3 = (x1+x2)/2;
   f3 = f(x3);
   if (f1*f3 < 0) { x2 = x3; f2 = f3; }
   if (f1*f3 > 0) { x1 = x3; f1 = f3; }
   n--;
  } while(n >=0 ) ;

  printf(" *** %d의 제곱근은 %f 입니다. *** \n", i+1, x3);
 }
}





쫌 더 쳐다보고 있어야 하는듯.

'춤추는 프로그래머 > C, C++' 카테고리의 다른 글

window mobile SDK 6.0  (0) 2010.03.06
mspdb80.dll이 없다고?  (0) 2010.02.28
C/C++ 문자열 처리 함수  (0) 2010.02.24
기사 하나.  (2) 2009.10.29
QoS (Quality of Service)  (0) 2009.06.12