<math.h>의 sqrt()를 사용하지 않고 제곱근을 구하는 소스
NUM_REPEAT값은 16~20 이면 충분하다.
큰수의 제곱근을 구할경우 NUM_REPEAT값을 더 큰수로 정하면 된다.

원리는 뉴튼-랩슨법을 이용한 근사값 구하기

double mysqrt(unsigned int src)
{
    unsigned int NUM_REPEAT = 16;
    unsigned int k;
    double t;
    double buf = (double)src;
    for(k=0,t=buf;k<NUM_REPEAT;k++)
    {
        if(t<1.0)
            break;
        t = (t*t+buf)/(2.0*t);
    }
    return t;
}

'c/c++' 카테고리의 다른 글

쓰레드를 이용한 행렬 곱연산  (0) 2010.09.16
c/c++ 2차원(이차원) 배열 동적할당 방법2  (0) 2010.08.06
c언어 2차원(이차원) 배열 동적 할당 방법  (0) 2010.08.03
sin 그래프  (0) 2010.07.30
중복없는 숫자 뽑기  (0) 2010.07.29
Posted by Нуеоп
,