Date: Thu 20 Aug 92 10:51:02 From: ronis AT ronis DOT chem DOT mcgill DOT ca (David M. Ronis) To: djgpp AT sun DOT soe DOT clarkson DOT edu Cc: ronis AT ronis DOT chem DOT mcgill DOT ca, dj AT ctron DOT com Subject: %g format problem Hi DJ, I may have found a bug with %g and #lg formats in GCC (version 1.08). In short I get funny results if I try to print a number, say 1.00001, specifying the number of significant digits to print. Here is a small example which illustrates the problem: ====================================================================== #include #include #include main(argc,argv) int argc; char **argv; { if(argc>1){ double x=atof(argv[1]); #ifndef __GNUC__ char buffer[80]; #endif printf("x=%13.5lg %13.5g(float) [%13.5lf %13.5f(float)]\n" ,x,(float)x,x,(float)x); #ifndef __GNUC__ printf("Result of gcvt: %s",gcvt(x,5,buffer)); #endif } exit(0); } ====================================================================== If I compile and run the code with argument 1.00001, the output line reads: x= 1.00001 1.00001001(float) [ 1.00001 1.00001(float)] In the first two fields, the double contains an extra digit (although the correct one), while the float contains far too many digits. Similarly, with argument 1.0001 I get: x= 1.0001 1.0001(float) [ 1.00010 1.00010(float)] which is correct. I've compiled the code with Microsoft C6.0 and the two cases given above yield: x= 1 1(float) [ 1.00001 1.00001(float)] Result of gcvt: 1. and x= 1.0001 1.0001(float) [ 1.00010 1.00010(float)] Result of gcvt: 1.0001 both of which are correct. (I also compiled the code with gcc on a SUN and with CC with identical results). Finally, note that although gcvt is mentioned in docs/funcs.doc (albeit with caveats) it is apparently not in any library. Thanks in advance for looking into this. David Ronis