This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more infromation.


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

Re: floating point library problems ...


Make sure that you have dynamic memory (heap) initialised properly. The
floating
point conversion in printf requires a small amount of dynamic memory to
do the
conversion. So if you assume that because you dont use any dynamic
memory that you
do not need to initialise then think again or don't do any floating
point
conversions in printf (or its variants sprintf, vprintf etc.). I have
fallen for
this one myself (on 68EZ328!).

Good Luck
Dave Williams
DragonBall Developers Lair
(http://www.ozemail.com.au/~davidwilliams/ddl_home.htm)

Ken DESMET wrote:

> Thanks to Luke, Greg, Philip and Kai for the your comments and suggestions.
> In the mean time this perticular problem is more or less solved. When I
> compiled the C sources I used it with the -m68000 flag to indicate to
> produce the 16 bit code (my target is an MC68VZ328). But I had not added the
> flag to the linker stage (that was stupid of course), and thus the linker
> used the default 32 bit libraries (for 68020 and onward). That whas the
> reason why multply worked and sin() and sqrt() functions not.
>
> Now my floating point functions work fine, however i an intresting situation
> whyle printing out the floating point value appears.
>
> void test(void)
>  {
>   double fpval;
>
>   fpval = sqrt(M_PI);
>   printf("sqrt(M_PI) = %f\n",fpval);
>  }
>
> The results I get are "sqrt(M_PI) = 1.>?LMMd", the "772454" has been
> transformed into ">?LMMd" and thus unreadable.
>
> Then I modified the program so that it would print out the abtained value as
> an integer number that has been multiplyed with 1000000.
>
> void test(void)
>  {
>   double fpval;
>   int intval;
>
>   fpval = sqrt(M_PI);
>   printf("sqrt(M_PI) = %f\n",fpval);
>   intval = fpval * 1000000;
>   printf("intval = %d.\n",intval);
>  }
>
> The output (is correct this time):
>
> sqrt(M_PI) = 1.772454
> intval = 1772453.
>
> Why is the floating point printed out correcty when a integer operation
> follows (when I remove the integer part i get unreadable decimal part) ?
>
> An interesting detail is the following: The values are printer out on an a
> graphic LCD screen (which works fine). When a floating point fuction is
> called, some dotted lines appeare on the screen, indicating that the program
> writes data somewhere in the LCD framebuffer memory when it should not. I
> have checked the memory map, an this should not happen. I think that
> somthing to do with the floating point subroutines is not properly
> initialised. But what ? ...
>
> Kind regards,
>
> Ken
>
> -----Original Message-----
> From: lgd@virata.com [mailto:lgd@virata.com]On Behalf Of Luke Diamand
> Sent: donderdag 14 september 2000 13:32
> To: ken@sdt.be
> Cc: crossgcc@sourceware.cygnus.com
> Subject: Re: floating point library problems ...
>
> Could you have some kind of problem with the endianness of doubles? See
> if you get the same problem with floats and work from there.
>
> At least on ARM, gcc assumes doubles are big-endian (the words are in
> the opposite order to the one you would expect, but within a word they
> are little endian). These leads to some weird results for the unwary...
>
> Luke Diamand
>
> Ken DESMET wrote:
> >
> > Hi all,
> >
> > I have build a cross compiler to a m68k target with the newlib-1.8.1
> > library.
> >
> > When i compile small test programs with simple floating point functions
> like
> > multiplications, they do work fine. More complex floating point functions
> > like sqrt() and sin() do not seem to function. They simply hang/never
> return
> > ...
> >
> > Any suggestions what could be the cause of this problem ?
> >
> > Greetings,
> >
> > Ken
>
> --
> Virata http://www.virata.com
> Cambridge
> Tel: +44 1223 566919      Fax: +44 1223 566915
>
> ------
> Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
> Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com

------
Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com


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