This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
Re: [Fwd: printf and floating point emulation]
- From: Eduardo Sabaj <esabaj at hasar dot com>
- To: Andrew Lunn <andrew at lunn dot ch>, ecos-discuss at ecos dot sourceware dot org
- Date: Wed, 09 Apr 2008 15:17:42 -0300
- Subject: Re: [ECOS] [Fwd: [ECOS] printf and floating point emulation]
- References: <47FCE8F3.3060206@hasar.com> <20080409165726.GB8526@lunn.ch>
Andrew, the program fails with the printing of any floating point
number. Anyway, what I'm printing is :
printf ("main: %f\n", 2.345);
The lines below were produced by the test program in:
packages/language/c/libc/stdio/current/tests/sprintf1.c
When the program reaches the first line with a %f format it hangs:
// Check 18
ret = sprintf(x, "%f", 2.5);
By the way, I downloaded the latest eCos version with the following command:
cvs -z3 -d :pserver:anoncvs@ecos.sourceware.org:/cvs/ecos co -P ecos
Any idea?
Regards,
Eduardo
----
INFO:<Starting tests from testcase sprintf1.c for C library sprintf()
function>
INFO:<These test individual features separately>
PASS:<%d test>
PASS:<%d test return code>
PASS:<%s test>
PASS:<%s test return code>
PASS:<padding test>
PASS:<padding test return code>
PASS:<hex conversion (lowercase)>
PASS:<hex conv (lowercase) return code>
PASS:<hex conversion (uppercase)>
PASS:<hex conv (upperbase ) return code>
PASS:<%c test>
PASS:<%c test return code>
PASS:<octal conversion>
PASS:<octal conversion return code>
PASS:<%u test>
PASS:<%u test return code>
PASS:<%n test>
PASS:<%n test return code>
PASS:<%% test>
PASS:<%% test return code>
PASS:<%ld test>
PASS:<%ld test return code>
PASS:<%lu test>
PASS:<%lu test return code>
PASS:<%x test>
PASS:<%x test return code>
PASS:<%X test>
PASS:<%x test return code>
PASS:<%0x test>
PASS:<%0x test return code>
PASS:<%0X test>
PASS:<%0X test return code>
PASS:<%p test return code>
INFO:<Starting floating point specific tests>
----
Andrew Lunn escribió:
On Wed, Apr 09, 2008 at 01:04:03PM -0300, Eduardo Sabaj wrote:
I found that the problem is the function vfnprint () located in
vfnprintf.cxx. It calls cvt() and this function calls modf(). This last
function seems to be the problem. This is the code extracted from cvt() :
...
for (p = endp - 1; integer; ++expcnt) {
tmp = modf(integer / 10, &integer);
*p-- = to_char((int)((tmp + .01) * 10));
}
...
This loop never ends!
Am I omiting any patch? Please I need help. If you have any suggestion
write me as soon as you can.
Regards,
Eduardo
Can you give a concrete example. Something like
main()
{
printf("%.2f\n, 3.141539);
}
which causes the problem. Does the value being printed matter?
What happens when you run the test program
packages/language/c/libc/stdio/current/tests/sprintf1.c
Thanks
Andrew
--
Ing. Eduardo Salvador Sabaj
Analista de Desarrollo
Compañía Hasar | Grupo Hasar*
*Marcos Sastre y José Ingenieros
El Talar. Pacheco
[B1618CSD] Buenos Aires. Argentina
Tel [54 11] 4117 8900 | Fax [54 11] 4117 8998
E-mail: esabaj@hasar.com
Visítenos en: www.hasar.com
<http://www.hasar.com>Información legal y política de confidencialidad:
www.grupohasar.com/disclaimer <http://www.grupohasar.com/disclaimer>
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss