Re: glib 2.2.3 test failures on Solaris

On Sun, 2003-09-14 at 00:00, Albert Chin wrote:
> I'm getting a test failure in strtod-test on glib-2.2.3 on Solaris
> 2.5.1-9/SPARC with Sun's C compiler, HP-UX 11.00 with the HP C
> compiler, and AIX 5.1 with the IBM C compiler. The problem is:
>   d = pow (2.0, -1024.1);
>   g_assert (d == g_ascii_strtod (g_ascii_dtostr (buffer, sizeof (buffer), d), NULL));
> If I:
>   g_ascii_dtostr (buffer, sizeof (buffer), d);
>   printf ("%s\n", buffer);
>   printf ("%f %f %f\n", d, strtod (buffer, NULL),
>           g_ascii_strtod (buffer, NULL));
> I get:
>   5.1901682964836177e-309
>   0.000000 0.000000 0.000000

You have to use %g to get anything other that 0.0 for these values,
since we're operating on the edges of double precision here. It is
entierly possible that the precision of the built-in strtod in the other
systems just isn't high enough to make the assert work.

>   (Redhat Linux 9 gives)
>     5.1901682964836274e-309
>     0.000000 0.000000 -1.231230

This however, is a bit strange. It should give three zeros.
I did some testing, showing up some very very strange behaviour:

 d = pow (2.0, -1024.1);
 g_ascii_dtostr (buffer, sizeof (buffer), d);
 g_print ("buffer: %s\n", buffer);
 g_print ("strtod(buffer) == %g\n", strtod (buffer, NULL));
 g_print ("buffer2: %s\n", buffer);
 g_print ("g_ascii_strtod(buffer) == %g\n", g_ascii_strtod (buffer, NULL));
 g_print ("strtod(buffer) == %g\n", strtod (buffer, NULL));

On RH9 this prints out:

buffer: 5.1901682964836274e-309
strtod(buffer) == 1.9036e+185
buffer2: 5.1901682964836274e-309
g_ascii_strtod(buffer) == 5.19017e-309
strtod(buffer) == 5.19017e-309


Why does the first call to strtod seemingly ignore the initial 5, and
make the exponent all wrong, but the second call does the right thing?

 Alexander Larsson                                            Red Hat, Inc 
                   alexl redhat com    alla lysator liu se 
He's a jaded guitar-strumming vagrant with a winning smile and a way with the 
ladies. She's a virginal French-Canadian queen of the dead prone to fits of 
savage, blood-crazed rage. They fight crime! 

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]