1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-09 06:29:38 +00:00

crazy hack so the function works better even when typecasting seems broken

This commit is contained in:
mrdudz 2022-11-18 00:55:00 +01:00
parent 15b713f7f1
commit c725cab7c6

View File

@ -3,10 +3,22 @@
#include <stdio.h>
char *_ftostr(char *buffer, float f) {
signed long intpart = (signed long)(f);
signed long intpart;
float fracpart;
float f1, f2;
signed long n0;
int is_negative;
unsigned long raw_value = *((unsigned long*)(&f));
// f = -1.23f;
intpart = (signed long)(f);
if (intpart < 0) {
intpart *= -1;
}
is_negative = (raw_value & 0x80000000) ? 1 : 0;
// printf("f:%f\n",f);
f2 = intpart;
// printf("f2:%f\n",f2);
@ -35,15 +47,15 @@ char *_ftostr(char *buffer, float f) {
}
// printf("n0:%ld\n",n0);
if (n0 >= 1000) {
sprintf(buffer, "<0x%08lx:%ld.%ld>", *((unsigned long*)(&f)), intpart, n0);
sprintf(buffer, "<0x%08lx:%s%ld.%ld>", raw_value, is_negative ? "-" : "", intpart, n0);
} else if (n0 >= 100) {
sprintf(buffer, "<0x%08lx:%ld.0%ld>", *((unsigned long*)(&f)), intpart, n0);
sprintf(buffer, "<0x%08lx:%s%ld.0%ld>", *((unsigned long*)(&f)), is_negative ? "-" : "", intpart, n0);
} else if (n0 >= 10) {
sprintf(buffer, "<0x%08lx:%ld.00%ld>", *((unsigned long*)(&f)), intpart, n0);
sprintf(buffer, "<0x%08lx:%s%ld.00%ld>", *((unsigned long*)(&f)), is_negative ? "-" : "", intpart, n0);
} else if (n0 >= 1) {
sprintf(buffer, "<0x%08lx:%ld.000%ld>", *((unsigned long*)(&f)), intpart, n0);
sprintf(buffer, "<0x%08lx:%s%ld.000%ld>", *((unsigned long*)(&f)), is_negative ? "-" : "", intpart, n0);
} else {
sprintf(buffer, "<0x%08lx:%ld.0000%ld>", *((unsigned long*)(&f)), intpart, n0);
sprintf(buffer, "<0x%08lx:%s%ld.0000%ld>", *((unsigned long*)(&f)), is_negative ? "-" : "", intpart, n0);
}
return &buffer[0];
}