본문 바로가기

continued fraction

Log Function Implementation 로그(log, ln) 함수의 구현은 본질적으로 arctan와 비슷한 문제를 가지고 있다. 먼저, 로그 함수의 x 값을 적절히 바꾸어서 테일러 급수 형태로 전개해보면, 다음과 같은 형태를 얻게 된다. ln(x) = 2 (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + z^9 / 9 + ....) z = (x - 1) / (x + 1) arctan와 마찬가지로, 분모가 대단히 느리게 커지고 있으며, 이것은 매우 천천히 구하고자 하는 값에 수렴하는 것을 의미한다. 로그 함수를 구현해야 한다면, 이것은 매우 치명적인 일이다. 하지만, 앞에서 이미 연분수(continued fraction)를 사용하여 이 문제를 효과적으로 다루었던 것처럼, 로그 역시 연분수를 사용해서 나타낼 수 있다. 그렇다면, 남은.. 더보기
Arctan Function Implementation arctan의 구현은, 생각보다 간단한 문제가 아니다. 무엇보다, 지금까지 사용해왔던 최적화 전략 중 하나가 통하지 않기 때문이다. 즉, arctan의 테일러 급수 전개에 의한 근사식을 구해보면 다음과 같은데, arctan(x) = x - (x^3 / 3) + (x^5 / 5) - (x^7 / 7) + (x^9 / 9) - .... 각 항의 분모를 살펴보면, 이것은 사인(sine) 함수나 코사인(cosine) 함수처럼 팩토리얼 형태가 아니며, 따라서 적절한 값을 구하고자 했을 때 빠르게 수렴하지 않는다. 각 항 하나하나의 값이 무시 못할 값이기 때문에, 아무리 적은 값이라도 적절한 오차 이내의 값으로 계산하기 위해서는 매우 많은 항이 필요하다. 각 항을 계산하는데 빠르게 증가하는 지수값이 있다는 것을 감.. 더보기