2011. 11. 1. 21:50
<math.h>의 sqrt()함수를 이용하지 않고, 간단하게 for문 몇번 돌리는 것으로 제곱근을 구할 수 있다.
뉴튼-랩슨법을 이용해서 빠르게 제곱근을 계산할 수 있다.
double mysqrt(unsigned int number) { unsigned int NUM_REPEAT = 16; unsigned int k; double res; double tmp = (double)number; for(k=0,res=tmp;k<NUM_REPEAT;k++) { if(res<1.0) break; res = (res*res+tmp)/(2.0*res); } return res; }
여기서 NUM_REPEAT는 for문의 반복 횟수를 의미하는데, 크면 클 수록 정확한 값을 구한다. 16~20정도면 상당히 정확한 값을 구할 수 있다. 10진법 소수점 단위로 비교하면서 구하는것보단 훨씬 빠르게 구하지만, <math.h>의 sqrt()함수보다 빠르진 않다.
뉴튼-랩슨법의 자세한 원리는 인터넷에서 찾아보면 된다. 원리만 알면 매우 쉽다.
'c/c++' 카테고리의 다른 글
[c언어] 변수 초기화 (0) | 2011.11.02 |
---|---|
[c언어] 상수 타입과 리터럴 타입 (0) | 2011.11.02 |
[c언어] 2차원 배열 동적 할당하기 (23) | 2011.11.01 |
[c언어] Quick Sort 소스코드 (0) | 2011.11.01 |
[download] 무료 컴파일러 다운로드 (1) | 2011.11.01 |