Hi in KDS 3.2 and latest SDK for K64F, this code:
double var1 = -5.8;
PRINTF("%f\r\n", var1);
double var2 = -10.4;
PRINTF("%f\r\n, var2);
double var3 = 1.5;
PRINTF("%f\r\n", var3);
produces:
-6.8
-11.4
1.5
i.e. negative double numbers are printed with -1 added to them. Why and how to fix it?
Hi Martin,
There is bug in the fsl_debug_console.c (look below for "//DES" comment).
static int32_t DbgConsole_ConvertFloatRadixNumToString(char *numstr,
void *nump,
int32_t radix,
uint32_t precision_width)
{
int32_t a;
int32_t b;
int32_t c;
int32_t i;
uint32_t uc;
double fa;
double dc;
double fb;
double r;
double fractpart;
double intpart;
int32_t nlen;
char *nstrp;
nlen = 0;
nstrp = numstr;
*nstrp++ = '\0';
r = *(double *)nump;
if (!r)
{
*nstrp = '0';
++nlen;
return nlen;
}
fractpart = modf((double)r, (double *)&intpart);
/* Process fractional part. */
for (i = 0; i < precision_width; i++)
{
fractpart *= radix;
}
if (r >= 0)
{
fa = fractpart + (double)0.5;
if (fa >= pow(10, precision_width))
{
fractpart++; //DES was intpart++;
}
}
else
{
fa = fractpart - (double)0.5; //DES???
if (fa <= pow(-10, precision_width))
{
fractpart--; //DES was intpart--;
}
}
Please see solution on this post: PRINTF in KDS
Regards,
David
Interestingly, I applied this fix last summer in order to fix the off-by-one error when printing negative floats. However, I've just noticed another corner case:
PRINTF("%4.1f\r\n", 7.94); // ----- displays "7.9" as you'd expect
PRINTF("%4.1f\r\n", 7.96); // ----- displays "7.0" instead of 8.0
Hello
we are using "%ld" for same application
so
can you try with "%ld " rather than "%f"