math - trigonometria - razones trigonometricas facil
Coste computacional de las funciones trigonométricas (8)
Posible duplicado:
¿Cómo funcionan las funciones trigonométricas?
¿Qué entra realmente en el cálculo de funciones trigonométricas como Sin, Cos, Tan y Atan?
Creo que he encontrado una optimización en mi código donde puedo evitar usar cualquiera de estas funciones y basar el problema en una pendiente en lugar de ángulos. Así que eso significa un par de operaciones de división en lugar de las funciones trigonométricas anteriores. Pero me gustaría saber más sobre lo que incluye esas funciones trigonométricas para poder comparar mi nuevo código (desde la perspectiva de la cantidad de operaciones matemáticas básicas). O tal vez acabo de encontrar una forma más tortuosa de hacer lo mismo o, peor aún, introducir un método menos eficiente.
Usando C ++ y Python, pero me imagino que es bastante independiente del lenguaje, ya que el costo de las operaciones matemáticas es relativo a las operaciones más primitivas.
¡Necesitas un perfil de tu código!
Usted necesita un perfil de este mismo. Según mis resultados, las funciones trigonométricas toman aproximadamente 100 ns y las divisiones alrededor de 20 ns. Eso se puede convertir fácilmente en respuestas. Pero, una vez más, lo más importante es que haga un perfil de esto en su hardware. De esa manera, obtendrás las respuestas y los conocimientos correctos para tu sistema.
(Esto fue originalmente un comentario sobre la respuesta de codekaizen, pero se hizo bastante largo ...)
(Codekaizen): La mayoría de las funciones trigonométricas se implementan como tablas de búsqueda en estos días.
um .. Ya que la mayoría de las funciones trigonométricas toman un argumento de doble precisión, buscar el valor no es práctico. Creo que la mayoría busca los enteros en cada lado y luego se interpola desde allí (es decir, Sin (5.279) es 27.9% desde Sin (5) a Sin (6)). Eso funciona menos que calcular el valor directamente, pero aún así una buena cantidad de cálculos.
Echa un vistazo a glibc . Utiliza varias implementaciones diferentes, algunas de ellas (como sysdeps / ieee754 / s_sin.c) parecen realmente complicadas, mientras que otras usan una instrucción de ensamblaje (como sysdeps / x86_64 / fpu / s_sincos.S). Es difícil decir el tiempo real requerido sin algunas mediciones.
El método casi óptimo (y el método generalmente utilizado) para evaluar las funciones trigonométricas es a través de una expansión polinomial ortogonal (serie Chebyshev). Una serie de este tipo con un número apropiado de términos será más rápida que la búsqueda en la tabla.
La única respuesta real que vas a obtener es "Perfil".
Lo más probable es que, si este no es un cuello de botella en su código, no hará ninguna diferencia notable en absoluto.
La mayoría de las funciones trigonométricas se implementan como tablas de búsqueda en estos días.
Los procesadores x86 modernos incluyen funciones trigonométricas en su conjunto de instrucciones, pero tardan muchos ciclos en ejecutarse. Entonces, si está en un procesador de este tipo y no tiene dependencias en su código (es decir, no necesita el resultado de un cálculo de pecado para iniciar el siguiente), entonces probablemente no obtendrá mucho más rápido. que usar el pecado y el cos directamente, ya que se canalizarán completamente, logrando una tasa efectiva de 1 por ciclo.
Mi experiencia con las funciones trigonométricas es que son extremadamente rápidas, y que la mayoría de ellas se implementan como tablas de búsqueda de todos modos ... Es decir, algunas divisiones y verificaciones de división por cero probablemente serán más lentas que una llamada a una función trigonométrica .