From: rca@cs.brown.edu (Ronald C. Antony)
Subject: Re: printf g format still broken under NeXTSTEP 3.0 
Organization: Brown University Department of Computer Science
Date: Wed, 11 Nov 1992 09:59:57 GMT

In article <1992Nov11.012228.23372@access.usask.ca> eric@skatter.usask.ca writes:
>I reported this bug in December 1989, and when NeXTSTEP 2.0 came out,
>and when NeXTSTEP 2.1 arrived, and now that NeXTSTEP 3.0 has arrived ...
>IT STILL ISN'T FIXED!!!!!
>
>Here's an example program:
>
>#include <stdio.h>
>int
>main (int argc, char **argv)
>{
>	int i, d;
>	double x, y;
>
>	y = 3.141592654;
>	for (i = 0, d = 1 ; i < 5 ; i++, d *= 10) {
>		x = y / d;
>		printf ("%12g %12.1g %12.2g %12.3g %12.4g\n", x, x, x, x, x);
>	}
>	return (0);
>}
>
>Here's what *should* print (according to the ANSI standard).  And it *does*
>print this on our SUN 4.1.2, and HP-UX V8, systems:
>     3.14159            3          3.1         3.14        3.142
>    0.314159          0.3         0.31        0.314       0.3142
>   0.0314159         0.03        0.031       0.0314      0.03142
>  0.00314159        0.003       0.0031      0.00314     0.003142
> 0.000314159       0.0003      0.00031     0.000314    0.0003142
>
>And here's what the NeXT produces:
>    3.141593          3.1         3.14        3.142       3.1416
>    0.314159          0.3         0.31        0.314       0.3142
>    0.031416            0         0.03        0.031       0.0314
>    0.003142            0            0        0.003       0.0031
>    0.000314            0            0            0       0.0003
>
>For the umpteenth time, NeXT:
>1. The precision specifier for %g format is supposed to set the number of
>   significant digits in the printed number.
>
>2. Non-zero digits to the left of the decimal point *do* count towards
>   the number of significant digits (see the first line of the tables).
>
>3. Leading zeroes do not count towards the number of significant digits,
>   even when they are to the right of the decimal point (see the last
>   three lines of the tables).

Well, not to protect NeXT in regards to sleeping over important bug
reports (sometimes I also wonder how they set the priorities, altough
certainly nobody could claim they are otherwise lazy), I still wonder
if they are not right. Maybe there are just two opinions what ANSI-C
is supposed to do.

The C-Bible "The C Programming Language" by K+R, 2nd edition, ANSI-C
states the following on page 244:

f	double; decimal notation of the form [-]mmm.ddd, where the
	d's is specified by the precision. The default precision is 6;
	a precision of ) suppresses the decimal point.

e,E	double; decimal notation of the form [-]m.dddddd e[+-]xx or
	[-]mdddddd E[+-]xx, where the number of d's is specified by
	the precision. The default precision is 6; a precision of 0
	suppresses the decimal point.
g,G	double; %e or %E is used if the exponent is less than -4 or
	greater than or equal to the precision; otherwise %f is used.
	Trailing zeros and a trailing decimal point are not printed.


Now if they got it right, NeXT got it right. If K+R got it wrong,
well, then NeXT should correct the bug and tell Prentice Hall to
correct their bug as well.

Ronald

------------------------------------------------------------------------------
"The reasonable man adapts himself to the world; the unreasonable one persists
in trying to adapt the world to himself. Therefore all progress depends on the
unreasonable man."   G.B. Shaw   |  rca@cs.brown.edu or antony@browncog.bitnet
Newsgroups: comp.sys.next.programmer