sin과 cos는 둘 중의 하나만 구현하면 나머지는 관계식으로 구할 수 있겠죠.
테일러 급수든 테이블 방식이든 적당한 것을 택해서 임의의 각도를 0~pi/2 범위로
환산해서 계산하면 되겠네요.
그런데 sqrt는 테일러 급수로는 무리가 있겠군요. 1 부근에서 전개해야 하는데
1보다 훨씬 큰 수에 대해서 계산하려면 몇 항까지 해야 할지 정하기가 어렵죠.
factorial을 계산해야 하는 부담도 있고요. 이것은 Newton-Rhapson 법을
쓰면 어떨까 합니다. sqrt(a)를 계산한다면
for initial value x0 and tolerance
do {
delta_x = (a/x0 - x0) / 2;
x0 += delta_x;
} while (fabs(delta_x) > tolerance);
[quote="leilei"]math 계열 함수만 넣으면 컴파일이 안돼서
직접 구현하셔도 그리 어렵지 않습니다.
다음은 제가 레포트로 짰던 sin 함수 구현입니다. 참고하세요~
sin(), cos()은 테이블을 이용하시는 것이 좋지 않을까요.
sin(), cos()은 테이블을 이용하시는 것이 좋지 않을까요.
임베디드 환경이신것 같습니다만...saxboy님 말씀처럼 테이블을 이
임베디드 환경이신것 같습니다만...
saxboy님 말씀처럼 테이블을 이용하는 방법도 괜찮을 것입니다. 별로 오차를 따지지 않는 다면 말입니다. 소수점 이하 몇 번째 숫자가 오차를 발생시킬 수 있는 환경이 아니라면 추천드립니다. 대부분의 환경에서는 괜찮겠죠 ^^;
테이블을 사용하시면 int 만 갖고도 굉장히 빨리 연산하실 수 있을 겁니다.
테이블 크기도 줄일 수 있습니다. sin(), cos()는 주기가 있지 않습니까? 간단한 연산으로 테이블을 1/4로 만들 수도 있습니다.
sin과 cos는 둘 중의 하나만 구현하면 나머지는 관계식으로 구할 수
sin과 cos는 둘 중의 하나만 구현하면 나머지는 관계식으로 구할 수 있겠죠.
테일러 급수든 테이블 방식이든 적당한 것을 택해서 임의의 각도를 0~pi/2 범위로
환산해서 계산하면 되겠네요.
그런데 sqrt는 테일러 급수로는 무리가 있겠군요. 1 부근에서 전개해야 하는데
1보다 훨씬 큰 수에 대해서 계산하려면 몇 항까지 해야 할지 정하기가 어렵죠.
factorial을 계산해야 하는 부담도 있고요. 이것은 Newton-Rhapson 법을
쓰면 어떨까 합니다. sqrt(a)를 계산한다면
계산이 간단한 데 비해 수렴 속도는 꽤 빠릅니다.
Re: math 계열 함수 구현
기계어 차원에서 math 함수를 지원하지 않는 CPU인가요? 보드 업체에서 넣지 않았다는게 무슨 뜻인지... -_-;;
댓글 달기