The bitwise construction of the floating-point numbers is a red herring.
This much simpler test yields the same result:
printf("%#.0g\n", 0.000956);
printf("%#.0g\n", 0.000098);
According to my understanding of the man page and the C99 spec, the
output should be:
0.001
0.0001
The Solaris printf() agrees with that, but the glibc 2.3.1 printf()
outputs:
0.0010
1.e-04
AMC