www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1992/08/20/11:03:17

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 <stdio.h>
#include <stdlib.h>
#include <math.h>

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



- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019