2014-05-20 2 views
0

삼각법과 함께 삼각법이 어떻게 작동합니까?이진 각도로 사인 값을 계산하는 방법은 무엇입니까?

360 ° 또는 2pi 각도가 주어진 부호없는 정수 유형에 대해 0에서 최대 값으로 이동한다고 가정하면이 표현으로 죄 및 기타 모든 함수를 계산하는 방법은 무엇입니까?

일반 알고리즘이란 무엇입니까?


편집

내 포인트는 부동 소수점 연산 또는 부동 소수점 유형을 삭제하는 것입니다, 난 단지 부호없는 정수로이를 구현하고 싶습니다.

+0

질문이 확실하지 않습니다. – MBo

+0

@MBo 부분이 분명하지 않습니까? – user2485710

+0

"이진 각도"란 무엇입니까? 정수의 어떤 값이 2Pi와 일치해야합니까? sin (i * Pi * coeff) 등의 문제는 무엇입니까? – MBo

답변

1

부호없는 유형이 UINT_MAX까지 올라간다면, 360 °는 2의 거듭 제곱을 의미합니다. UINTMAX + 1.

이 경우 매우 간단합니다. 표준시 삼각 함수 sinpi()을 사용하면 x에 적용 할 때 sin (πx)을 계산합니다. 32 비트와 unsigned int

일례 : double로 변환 및 승산은 최종 결과 sinpi()만큼이나 정확 즉, 정확한 양임을

sinpi((double)n * 0x1.0p-31) 

참고. CRlibm 내에 최대 정확도의 배정도 sinpi을 찾을 수 있습니다.

+0

알고리즘을 조금 더 확장 할 수 있습니까? 서명되지 않은 인티 지의 관점에서 모든 것을 유지할 수 있습니까? 그게 내가하려는 일이야. 예를 들어, 앵글과 관련 연산에'uint32_t'를 사용하십시오. – user2485710

+0

@ user2485710 오, 자신의 사인 함수를 구현하는 방법을 묻습니다. 귀하의 질문은 명확하지 않습니다. 좋은 소식은 당신의 선택에 따라 논쟁의 감소가 쉽다는 것입니다. 0 근처에서 코사인을 구현하는 문제에 π/2 근처에서 사인을 구현하는 문제를 대체 할 수도 있습니다. 나쁜 소식은 유용한 대답을 유도 할 수있는 필요한 정보가 부족하다는 것입니다. 어떤 종류의 정확성을 찾고 계십니까?고정 소수점 계산을 돕기 위해 이미 일종의 시스템을 사용하고 있습니까? 아니면 우리가이를 해결할 것으로 기대하십니까? ... –

+0

@ user2485710 "선택과 함께"라고 말하면, 물론 "내 대답에서 가정하기로 결정한 가능한 선택"을 의미합니다. 귀하의 질문에 실제로 UINTMAX + 1을 360 °로 사용한다고는하지 않습니다. –

1

나는 이것을 CORDIC 알고리즘을 기반으로 한 번 구현했습니다. 이진 각도의 경우 알고리즘은 간단합니다.

x = 0에 대해 n 비트 이진 각도와 벡터 [cos (x), sin (x)]를 초기화합니다. MSB에서 LSB까지 각 비트에 대해 tau 또는 pi). 회전 행렬은 사전 계산 될 수 있습니다. 알고리즘은 최대 4 개의 덧셈과 2 개의 곱셈을 곱하여 이진 각도에서 설정된 비트 수를 곱합니다.

그러나! 진짜 문제는 죄 (x)와 cos (x)의 결과 값을 어떻게 표현할 것인가입니다. 그것들은 고정 소수점이거나 부동 소수점 수 있습니다 ... 주요 문제는 효율적으로 추가 및 곱셈을 구현하는 것입니다.