Appendix B: Math Samples and Function Tables
Para aplicaciones donde se desarrollan muchas multiplicaciones y divisiones en ausencia de
sumas y restas, la codificación exponencial puede acelerar las cosas. La codificación
exponencial es también útil para comprimir números en pocos bits- sacrificando resolución
en mayores magnitudes. En muchas aplicaciones tales como síntesis de audio, la naturaleza
de las señales es logarítmica en ambas frecuencia y magnitudes. Procesar tales datos en forma
exponencial es natural y eficiente, y tiene a ofrecer una linearidad simple a lo que es
actualmente logarítmico.
El ejemplo de código dado abajo usa cada muestra d tablas verbatim. Mayor resolución
podría alcanzarse interpolando linearidad entre las tablas muestra, como el cambio de
gradiente es ligero entre muestra y muestra.. El costo podría se código mas largo y velocidad
de ejecución mas baja.
Tabla Log ($C000-$CFFF)
La tabla Log contiene datos usados para convertir números no signados en exponentes base-
2.
La tabla Log esta hecha de 2,048 words no signados los cuales hacen los exponentes
fraccionales base-2. Para usar esta tabla debe determinar primero la porción entera del
exponente del numero que esta convirtiendo. Esto es simplemente la posición mas importante
del bit. Para $60000000 será 30 ($1E). Esta porción entera siempre encajara en 5 bits.
Separando esos 5 bits en el resultado para que ocupen las posiciones 20..16. En nuestro caso
de $60000000, ahora tendremos un resultado parcial de $001E0000. Despues justificar al
inicio
y separar los primeros 11 bits debajo dejando los mas importantes bits en las
posiciones 11..1. Esto será $0800 para nuestro ejemplo. Sumar $C000 para la tabla Log base
y sabrás la dirección actual word del exponente fraccional. Leyendo el word a $C800,
tenemos el valor $95C0. Sumando esto en el resultado parcial $001E95C0 – es $60000000 en
forma exponente. Observe que los bits 20..16 hacen la porción entera del exponente, mientras
que los bits 15..0 hacen la parte fraccional, con el bit 15 siendo ½, bit 14 siendo ¼, y así
sucesivamente hasta el bit 0. El exponente ahora puede manipularse al sumar, restar y mover .
Siempre asegúrese que las operaciones matemáticas nunca llevaran al exponente debajo de
cero o generara un sobre flujo en el bit 20. De otra forma no se podrá convertir a un numero
correctamente.
Aqui hay una rutina que convierte un numero no signado en exponente base-2 usando la tabla
Log:
' Convierte un numero en exponente
'
' on entry: num holds 32-bit unsigned value
' on exit: exp holds 21-bit exponente con 5 bits enteros y 16 bits fraccionales
'
Propeller Manual v1.1 · Page 399