forked from haraldwolff/avr-fw-modules
32 lines
394 B
C
Executable File
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;
|
|
};
|
|
|