[Ihsan Kehribar] señala un truco inteligente que puede usar para calcular de manera rápida y eficiente el logaritmo de un número entero de 32 bits. La técnica se basa en la instrucción CLZ que cuenta el número de ceros iniciales en una palabra de máquina y está disponible en muchos procesadores modernos. Los algoritmos típicos utilizados para calcular logaritmos no son rápidos y tienen un tiempo de ejecución variable según el valor de entrada. Técnica [Ihsan] que utiliza es rápido y tiene un tiempo de ejecución constante.
La ecuación anterior resumió las matemáticas detrás del algoritmo. Usando la instrucción CLZ, obtenemos fácilmente el primer término. Al usar el resto y una tabla de búsqueda precalculada, es posible obtener la segunda expresión con diversos grados de precisión, según el tamaño de la tabla y si acepta o no el efecto de la interpolación; los de cierta edad probablemente no lo hagan. No me quejo al recordar la interpolación manual de tablas logarítmicas en la clase de matemáticas de la escuela secundaria. [Ihsan] publicó una implementación de esta técnica con licencia del MIT en su repositorio de GitHub, que incluye un algoritmo en lenguaje C y herramientas de Python para generar la tabla de búsqueda y evaluar errores.
¿Por qué harías eso? Nuestro primer pensamiento fue la transmisión de operaciones DSP en tiempo real, donde desea cálculos rápidos y deterministas, y [Ihsan]’s llama específicamente al procesamiento de audio incorporado como una clase de dichas aplicaciones. Y debería saberlo, después de todo, ya que desarrolló un sintetizador FM polifónico compatible con MIDI en el Cortex M0 que cubrimos en 2015.