Tengo una aplicación en la que tengo que ejecutar $\cos(s)$ (e $\operatorname{sinc}(s) = \sin(s)/s$) un gran número de veces y es medido a ser un cuello de botella en mi aplicación.
No necesito cada último dígito de precisión: $10^{-10}$ sobre un rango de entrada de $[-15^\circ < s < 15^{\circ}]$ debería ser suficiente (Este es el límite del sensor de entrada de datos).
He implementado una simple aproximación de Taylor, pero me gustaría preguntar:
- (a) ¿existe una forma más eficiente de aproximación?
(b) Si Taylor es el más eficiente, es que hay una forma mejor de hacerlo?
// Equation Coefficients double s_2 = 0.25 * omega_ebe.squaredNorm(); double s_4 = s_2 * s_2; double s_6 = s_4 * s_2; double s_8 = s_6 * s_2; double s_10 = s_8 * s_2; double cos_coef = 1.0 - s_2 / 2.0 + s_4 / 24.0 - s_6 / 720.0 + s_8 / 40320.0 - s_10 / 3628800.0; double sinc_coef = 0.5 - s_2 / 12.0 + s_4 / 240.0 - s_6 / 10080.0 + s_8 / 725760.0 - s_10 / 79833600.0;
EDIT: no he olvidado a seleccione una respuesta. Voy a código de algunos de los y las ejecutan en destino (incorporado un PowerPC y una incrustado BRAZO) para ver cómo se realizan.