Elevar un nº a una potencia fraccionaria en C para un microcontrolador


#1

Buenas,
necesito aplicar vía fw una expresión matemática a un parámetro de entrada.Quiero hacer una función que pase por parámetro un valor entero. Al cual debe aplicársele una función exponencial. El problema es que el exponente es un nº con decimales, un fraccionario << 1.

Quisiera crear una función que me eleve a una potencia que viene multiplicada por un valor decimal muy pequeñito. He oído hablar de la función “pow()” de la librería math.h de C.

Pero por lo que he visto no es fácil que te la reconozca el compilador a menos que escribas unas determinadas directivas, cosa que en el IDE que uso, obsoleto, no sabría cómo hacer. Algunas diferencias existen entre programar C para linux o para windows y programar C para un microcontrolador. Pero sobretodo hay diferencias entre usar un IDE del proveedor para compilar que hacerte tu propio makefile (que tengo bastante virgen).

Qué opciones me daríais para calcular esa potencia? -con o sin pow.-
Esta es la expresión y el argumento que le quiero pasar “x” será entero siempre:

e^(0.0824·x)

Al multiplicarse pasará a ser decimal siempre. Tendré que declararla como float o double. Pero lo que me preocupa es el tema de la coma flotante al tratarse de uC. Por que algunos integran una FPU para los decimales y otros no. Lo que no sé la diferencia sobre cómo representan/operan los valores fraccionarios estos y los que no disponen FPU. De ahí que desconozco si puedo emplear tranquilamente pow() o si existen formas mejores.

Por si fuera necesario el dato, estoy trabajando con un coldifre II (ya casi en extinción) y lo programo con un Codewarrior instalado en un w7. No creo que sea relevante; pero el proyecto integra un RTOS (uTasker).

Saludos.


#2

Creo que en esta página hay un algoritmo que puedes usar:

usando VHDL:


#3

Gracias, está muy bien la explicación!.

Me quedo con el algoritmo.

Saludos.