This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Question for displaying floating point in eCOS aplication. Thanks a lot


Thanks a lot. Andrew.

But when I tried I got this output:

float test_data=4.00;

diag_printf("0x%08x", test_data);
// output is: 0x40100000 (strange?? seems this is in real*8 format rather
should be in real*4 format (0x40800000) )

printf("%f", test_data);
// output is: 4.0000 (correct)

Does something wrong with the compiler? or settings? Thanks a lot. ( I am on
ARM 9 target)

Thanks a lot.

-----Original Message-----
From: ecos-discuss-owner@sources.redhat.com
[mailto:ecos-discuss-owner@sources.redhat.com]On Behalf Of Andrew Lunn
Sent: 07 August 2003 14:30
To: QiangHuang
Cc: Ecos-Discuss
Subject: Re: [ECOS] Question for displaying floating point in eCOS
aplication. Thanks a lot


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


-- 
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]