Я хотел бы вычислить как синус, так и косинус значения вместе (например, для создания матрицы вращения). Конечно, я мог бы вычислить их отдельно, одно за другим a = cos(x); b = sin(x);
, но мне интересно, есть ли более быстрый способ, когда нужны оба значения.
Изменить: чтобы обобщить ответы на данный момент:
Влад сказал, что есть команда asm, вычисляющая их
FSINCOS
обоих (почти одновременно с вызовом вFSIN
одиночку)Как заметил Чи , эта оптимизация иногда уже выполняется компилятором (при использовании флагов оптимизации).
caf указал, что функции
sincos
иsincosf
, вероятно, доступны и могут быть вызваны напрямую, просто включивmath.h
Подход tanascius к использованию справочной таблицы является спорным. (Однако на моем компьютере и в тестовом сценарии он работает в 3 раза быстрее, чем
sincos
с почти такой же точностью для 32-битных чисел с плавающей запятой.)Джоэл Гудвин связался с интересным подходом к чрезвычайно быстрой технике аппроксимации с довольно хорошей точностью (для меня это даже быстрее, чем поиск в таблице)