[ECOS] Question for displaying floating point in eCOS aplication. Thanks a lot
Andrew Lunn
andrew.lunn@ascom.ch
Thu Aug 7 13:30:00 GMT 2003
On Thu, Aug 07, 2003 at 01:43:58PM +0100, QiangHuang wrote:
> Hi all:
> I tried to use fprintf() to display a floating point value but seems it
> is real*8 format. is this right? my data is in real*4 format so what flag
> should I use to display floating point (real*4 format) data with fprintf()?
>
> for example
>
>
> // data in real*8 format = 4
> cyg_uint32 real8_data = 0x4010 0000;
>
> // data in real*4 format = 4
> cyg_uint32 real4_data = 0x4080 0000;
>
> fprintf(client, "%f ", real8_data);
> // I can see the output is: 4 -- correct
>
> fprintf(client, "%f ", real4_data);
> // I can see the output is: 512 -- not correct
>
> Did I make anything wrong here?
> can anybody help on this? Thanks a lot.
Approaching the problem from the other end:
int main(int argc, char * argv[])
{
float f = 4.0;
double d = 4.0;
printf("f=%f, 0x%x\n",f,*(unsigned long *)&f);
printf("d=%f, 0x%llx\n",f,*(unsigned long long *)&d);
return 0;
}
./float
f=4.000000, 0x40800000
d=4.000000, 0x4010000000000000
I was talking nonsense about normalization. I should go back and read
the CompSci text book.
You problems might be types and casting. Notice how i cast my
float/double before printing them. If your real8_data truly is a
cyg_uint32, the compiler will silently convert it to a double before
printing it. Although i would not expect 512!
Andrew
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss
More information about the Ecos-discuss
mailing list