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