이면
이다.
꼴로 나타낼수 있으므로 여기에 로그를 취하면
이렇게 된다. ln2는 상수값이므로 중요하지 않고 n*ln2도 곱셈으로 계산가능하다. 우리가 구현해야할것은
를 계산하는 부분이다.
두고두고 써먹는 테일러 전개를 이용해서 자연로그 함수를 다항함수꼴로 전개해보자.
(단 |x|<=1 일때만 수렴)
가 0에서 2사이이므로 x는 -1에서 1사이가 된다.
따라서 이 전개식을 계산하면 될듯하지만
이 전개식은 치명적인 약점을 가지고 있다. 수렴속도가 매우 느리다는 것이다!!!
위 전개식처럼 부호가 번갈아 나오는 교대부호급수는 수렴속도가 너무 느려서 차마 봐줄수가 없다.
그래서 수학자들이 해결책을 내놓았다.
두 테일러 전개식이 있다. 수렴범위 내에서는 항끼리 자유롭게 더하고 뺄수도 있다.
위식에서 아래식을 뺀다.
로그끼리의 뺄셈은 나눗셈으로 바꿀수 있다는 것을 기억하라.
따라서
이다.
여기서
라고 하면
z(1-x)=1+x
z-zx=1+x
z-1=zx+x
z-1=x(z+1)
(z-1)/(z+1)=x
가 된다.
z값이 어떤 양의 실수이던간에 x값은 |x|<=1을 벗어나지 않는다.
따라서 모든 양의 실수 z에 대해 다음과 같이 쓸수 있다.
전개식의 모든 항이 같은 부호로 되어있다. 이것은 무엇을 의미할까?
엄청난 수렴속도!!!
테스트로 ln 5 를 구해보자.
z = 5 라고 하면
계산해보면 대략 1.60 정도가 나오는데 ln 5의 값 맞다!
최적화를 해보자.
계속 반복되는
값을 먼저 계산해놓고 변수로 두면 연산량을 획기적으로 줄일수 있다.
( x=(z-1)/(z+1) )
이 전개식도 잘 묶으면
과 같이 된다.
여기서 x^2의 값도 미리 계산해서 두면 연산량을 더 줄일수 있다.
역시 적당한 항까지 취해서 원하는 정밀도까지 계산해나가면 된다.
이진-최대공약수 알고리즘. (0) | 2008.12.20 |
---|---|
역삼각함수를 구현해보자. (0) | 2008.12.08 |
삼각함수를 구현해보자. (0) | 2008.12.07 |
지수함수 exp를 구현해보자. (2) | 2008.11.28 |
제곱근(sqrt) 함수를 구현해보자. (3) | 2008.11.26 |
아트 코딩, 변태 코딩의 도화선 (4) | 2008.11.12 |
댓글 영역