값의 사인과 코사인을 함께 계산하고 싶습니다 (예 : 회전 행렬 생성). 물론 a = cos(x); b = sin(x);
, 처럼 하나씩 하나씩 따로 계산할 수 는 있지만 두 값이 모두 필요할 때 더 빠른 방법이 있는지 궁금합니다.
편집 : 지금까지 답변을 요약하려면 :
Vlad 는
FSINCOS
두 가지를 모두 계산하는 asm 명령이 있다고 말했습니다(FSIN
혼자호출과 거의 동시에)Chi가 알아 차린 것처럼 ,이 최적화는 때때로 컴파일러에 의해 이미 수행됩니다 (최적화 플래그를 사용할 때).
카페는 기능이 있음을 지적
sincos
하고sincosf
아마 가능하며 단지 포함하여 직접 호출 할 수 있습니다math.h
조회 테이블을 사용하는 tanascius 접근 방식은 논란의 여지가 있습니다. (그러나 내 컴퓨터와 벤치 마크 시나리오에서는
sincos
32 비트 부동 소수점에 대해 거의 동일한 정확도보다 3 배 빠르게 실행됩니다.)Joel Goodwin 은 매우 정확한 근사화 기법에 대한 흥미로운 접근 방식에 연결했습니다 (저에게는 테이블 조회보다 훨씬 빠릅니다).
sinx ~ x-x^3/6
및 cosx~1-x^2/4
근사치로 당신은 정확성보다는 속도에 대해 걱정합니다. 정확도에 더 많은 가중치를두면 두 시리즈 중 하나에 용어를 추가 할 수 있습니다 ( en.wikipedia.org/wiki/Taylor_series 아래로 스크롤하여 trig taylor 시리즈로 스크롤합니다.) 이는 시간이 다른 원하는 함수를 근사화하는 일반적인 방법 n
입니다. 따라서 사인과 코사인이 속한 더 큰 함수가 있다면 sin 대신에 근사하면 훨씬 더 큰 속도를 얻을 수 있습니다 .cos는 독립적입니다.
x
x_0
x_0
x_0
0