x의 n제곱근은
의 반복으로 구할 수 있다.
그래서 Squar Root 는
n에 2를 대입해서
의 반복으로 얻을 수 있다.
float mySqrt(int x)
{
int i;
float t= 1;
for(i=0; i<10; i++) {
t= (t+x/t)/2;
}
return t;
}
x의 값이 커질수록 오차가 커지고,
loop를 많이 돌릴수록 오차가 줄어든다.
math.h 에있는 sqrt 함수의 결과와 mySqrt 함수를 비교해 봤을 때,
x 를 1 ~ 65535 까지 증가시키며 값을 얻었을 때
한 10번정도 루프를 돌리니까 65535 쯤에서는 0.1 정도의 오차가 있었고,
연산시간은 크게 차이 없었다.
