avr-fw-modules/core/src/fp4816_pow.c

32 lines
394 B
C
Executable File

#include <fixpoint/fp4816.h>
fp4816_t fp4816_pow(fp4816_t v,int pow) {
uint8_t neg;
fp4816_t calc = 1L<<16;
if (!pow)
return calc;
if (pow < 0) {
pow = -pow;
neg = 1;
} else {
neg = 0;
};
if (pow == 1) {
calc = v;
} else {
while (pow > 0) {
calc = fp4816_mul( calc, v );
pow--;
};
};
if (neg) {
calc = fp4816_div( 1L<<16, calc );
};
return calc;
};