exp(x)의 테일러 전개식이다. 다행이도 exp(x)의 전개식은 어떤 x에 대해서도 성립한다. 그럼 그냥 간단히 저 식을 구현하는걸로 exp구현을 끝낼수 있지만, 역시 프로그래머에게는 속도가 중요하다. 그래서 다음과 같이 식을 변형해보자.
(단, )
가 된다.
는 어차피 부동소수점데이터에서 지수부로 곧바로 들어갈테고 만 계산하면 된다. 그런데 ln2=0.693147.. 이므로, α는 ln2보다 작으므로, 테일러 전개에서 x의 차수가 높아질수록 항의 값은 작아질 것이다.
이제 필요한 정밀도까지 계산해 내려가면 된다. float(32비트 부동소수점형)같은 경우 정밀도가 23비트이므로 항이 보다 작아질때까지 더해주면 된다. α가 0에 가깝다면 적은 수의 항만 계산해도 되고, ln2에 가깝다면 40여개의 항을 계산해야 될수도 있다. α에 따라 계산하는 항수를 조절하는 것도 좋은 방법이다.
그리고 테일러 전개식을 다음과 같이 변환하면 계산량을 줄일수 있다.
역삼각함수를 구현해보자. (0) | 2008.12.08 |
---|---|
삼각함수를 구현해보자. (0) | 2008.12.07 |
자연로그 ln을 구현해보자. (4) | 2008.12.03 |
제곱근(sqrt) 함수를 구현해보자. (3) | 2008.11.26 |
아트 코딩, 변태 코딩의 도화선 (4) | 2008.11.12 |
BCD와 일반적인 2진표현 (1) | 2008.07.10 |
댓글 영역