forked from haraldwolff/avr-fw-modules
42 lines
658 B
C
Executable File
42 lines
658 B
C
Executable File
#include <fixpoint/fp4816.h>
|
|
|
|
int fp4816_to_a(char *buffer,fp4816_t v) {
|
|
int8_t n = 14;
|
|
fp4816_t div = 0x5AF3107A4000LL << 16;
|
|
|
|
union {
|
|
fp4816_t value;
|
|
int32_t i32;
|
|
} u;
|
|
u.value = v;
|
|
if (u.value < 0) {
|
|
*(buffer++) = '-';
|
|
u.value = -u.value;
|
|
};
|
|
while (n >= 0) {
|
|
if (u.value >= div) {
|
|
uint8_t digit = u.value / div;
|
|
|
|
*(buffer++) = ('0' + digit);
|
|
u.value %= div;
|
|
} else if (n == 0) {
|
|
*(buffer++) = '0';
|
|
};
|
|
div /= 10;
|
|
n--;
|
|
};
|
|
*(buffer++) = ',';
|
|
while (n > -12) {
|
|
u.i32 *= 10;
|
|
uint8_t digit = u.i32 / (1L<<16);
|
|
|
|
u.i32 %= (1L<<16);
|
|
|
|
*(buffer++) = '0' + digit;
|
|
n--;
|
|
};
|
|
*(buffer) = 0x00;
|
|
return n;
|
|
};
|
|
|