* Floating point in math function
@ 2004-01-06 7:09 Ken
0 siblings, 0 replies; only message in thread
From: Ken @ 2004-01-06 7:09 UTC (permalink / raw)
To: gcc-help
Hi!
Now i am using arm-elf-gcc 3.03 compile program for ATMEL ARM7TDMI, I met a trouble that the math library seems some bugs!
This is the enviroment:
CPU:
ATMEL ARM7TDMI 40008
RAM:
256KB (in CPU)
GCC:
arm-elf-gcc 3.03
I used such functions in my program:
* sin
* cos
* tan
* sqrt
* printf
[ Problem 1 ]
----------------------------------------------
void testFloat()
{
const float pi = 3.14;
float f = tan(pi / 4), x, y; <------ f = 1.072692E+9 ! wrong! (while sometimes it's ok in other function)
int i;
printf("sin(pi/4) = %f\n", sin(pi/4));
getch();
printf("tan(pi/4) = %f\n", tan(pi/4));
getch();
printf("atan(pi/4) = %f\n", atan(pi/4));
getch();
get_key();
}
*** Does something wrong with tan()?
[ Problem 2 ]
----------------------------------------------
At first the produced binary size is 67,040(bytes)
But when i insert into 500 lines such code:
f = sqrt(sin(pi/4) * cos(pi/4));
...
Now the produced binary size became to 134,696(bytes)!
*** Why it cost so much?
[ Problem 3 ]
----------------------------------------------
void testFloat2()
{
const float pi = 3.14;
float f, g, x;
f = sin(pi/4); <------ f = 7.068252E-1
g = cos(pi/4); <------ g = 7.073882E-1
x = f * g; <------ f = 4.999998E-1
x = sqrt(x); <------ Died here!
}
*** It seems it break the system, does these functions need very large memory space? If so, is the space in .BSS section or other defined stack?
[ Problem 4 ]
----------------------------------------------
printf("sizeof(double) = %d", (unsigned int)sizeof(double));
When I used much math function, sizeof(double) maybe not 8! I met 500!
It seems a big joke!
[ Problem 5 ]
----------------------------------------------
When many math function used in program, any dynamic parameters function such as sprintf(...) will failed!
eg. sprintf(buf, "hello %s", "john");
the result buf maybe "hello %s" AND ALSO maybe ""!
It seems that the function stack was breaked!
[ I think ]
----------------------------------------------
I had hear that ARM7TDMI have no hard floating point, *** Does the CFLAG need -msoft-float option? but when I used -msoft-float, the compile told me: "xxxx.o uses hard floating point, whereas module.elf uses soft floating point".
I saw this news on the GCC home page:
"August 27, 2003 Nicolas Pitre has contributed his hand-coded floating-point support code for ARM...."
*** Does the newest arm-elf-gcc contains the soft-float library?
IF NOT
*** Need I rebuild the libc.a and libgcc.a to support soft floating? and where to get the source code?
CAN YOU HELP ME OUT OF THIS TROUBLE? THANKS VERY MUCH!
Thanks!
2003/1/6
Ken
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-01-06 7:09 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-06 7:09 Floating point in math function Ken
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).