Chciałbym obliczyć zarówno sinus, jak i współsinus wartości razem (na przykład, aby utworzyć macierz rotacji). Oczywiście mógłbym je obliczyć osobno, jeden po drugim, npa = cos(x); b = sin(x);
, ale zastanawiam się, czy istnieje szybszy sposób, gdy potrzebuję obu wartości.
Edycja: podsumowanie dotychczasowych odpowiedzi:
Vlad powiedział, że istnieje polecenie asm
FSINCOS
obliczające oba z nich (prawie w tym samym czasie, co wywołanieFSIN
samego)Jak zauważył Chi , ta optymalizacja jest czasami już wykonywana przez kompilator (przy użyciu flag optymalizacji).
caf wskazał, że działa
sincos
isincosf
prawdopodobnie są dostępne i można je wywołać bezpośrednio, po prostu włączającmath.h
Podejście Tanasciusa do korzystania z tabeli przeglądowej jest dyskutowane jako kontrowersyjne. (Jednak na moim komputerze iw scenariuszu porównawczym działa 3x szybciej niż
sincos
z prawie taką samą dokładnością dla 32-bitowych liczb zmiennoprzecinkowych).Joel Goodwin połączył się z ciekawym podejściem do ekstremalnie szybkiej techniki przybliżania z całkiem dobrą dokładnością (dla mnie jest to nawet szybsze niż przeglądanie tabeli)