asd@cbnewsj.ATT.COM (adam.denton) (12/12/89)
Here's a seemingly easy question. It has been nagging me for quite a while.
I would like to know what the CORRECT format specifier is in printf()
to print out values of type `float' and values of type `double'.
According to K&R2, page 244, the format specifiers e, f, and g all default
to type `double'. K&R2 does not mention the use of the `l' (lower case ell)
in regard to floating point. Reading the description, it doesn't appear
that there's any way to tell printf() you're passing it a `float' instead
of `double.'
K&R2: printf("%f", 3.1416) type=`double.'
K&R2: printf("%lf", 3.1416) not discussed
Now in the Turbo C 2.0 reference manual under ...printf(), it is mentioned
that the letter ell can be prefixed to e, f, or g to indicate that the
argument is type `double.' I take this to mean that, if you don't include
the ell, then it assumes the argument is type `float' (since capital L
is available for `long double').
TC2: printf("%lf", 3.1416) type=`double'
TC2: printf("%f", 3.1416) referred to as `floating point' only;
I assume it's `float.' Am I right?
So...what gives? Is there a conflict here? Did K&R2 omit anything?
What does pANS say?? Enquiring minds want to know!
Adam S. Denton
asd@mtqua.ATT.COM
...!att!mtqua!asdgrogers@sushi.uucp (Geoffrey Rogers) (12/13/89)
In article <2777@cbnewsj.ATT.COM> asd@cbnewsj.ATT.COM (adam.denton) writes: >Here's a seemingly easy question. It has been nagging me for quite a while. > >I would like to know what the CORRECT format specifier is in printf() >to print out values of type `float' and values of type `double'. > The correct format specifier are %e, %g or %f to print values of type float or double. >According to K&R2, page 244, the format specifiers e, f, and g all default >to type `double'. K&R2 does not mention the use of the `l' (lower case ell) >in regard to floating point. Reading the description, it doesn't appear >that there's any way to tell printf() you're passing it a `float' instead >of `double.' That because the compiler is going to convert all arguments of type float to type double, if that argument does not have a protype and remember that the only arguments that have a protype with printf is the first (or first 2 for fprintf and sprintf). > > K&R2: printf("%f", 3.1416) type=`double.' > K&R2: printf("%lf", 3.1416) not discussed [text deleted] > > TC2: printf("%lf", 3.1416) type=`double' By pANS the above is undefined. > TC2: printf("%f", 3.1416) referred to as `floating point' only; > I assume it's `float.' Am I right? By pANS the above should work on types of double (remember: value of type get converted to double before the call). > >So...what gives? Is there a conflict here? Did K&R2 omit anything? >What does pANS say?? Enquiring minds want to know! > It appears that TC2 is wrong with regards to pANS. Yes there is a conflict here. No, K&R2 did not omit anything. K&R2 document the same thing as pANS, since it is based from the standrad. +------------------------------------+---------------------------------+ | Geoffrey C. Rogers | "Whose brain did you get?" | | grogers@convex.com | "Abbie Normal!" | | {sun,uunet,uiucdcs}!convex!grogers | | +------------------------------------+---------------------------------+
chris@mimsy.umd.edu (Chris Torek) (12/13/89)
In article <2777@cbnewsj.ATT.COM> asd@cbnewsj.ATT.COM (adam.denton) writes: >I would like to know what the CORRECT format specifier is in printf() >to print out values of type `float' and values of type `double'. `%e', `%f', and `%g'. >According to K&R2, page 244, the format specifiers e, f, and g all default >to type `double'. K&R2 does not mention the use of the `l' (lower case ell) >in regard to floating point. K&R2 does, however, mention (possibly elsewhere) that it is NOT POSSIBLE to pass a `float' to a variadic function. All such values are converted to double precision in the absence of a prototype, or in the presence of a variadic prototype. >Now in the Turbo C 2.0 reference manual under ...printf(), it is mentioned >that the letter ell can be prefixed to e, f, or g to indicate that the >argument is type `double.' ... which is incredibly misleading, since the letter ell can be omitted to indicate that the argument is type double as well. -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163) Domain: chris@cs.umd.edu Path: uunet!mimsy!chris