The meaning of “precision” depends on the format type. With ‘g’ or ‘G’, it specifies the number of significant digits (like the --digits option); with ‘e’, ‘E’, ‘f’, or ‘F’, it specifies the maximum number of digits to be shown after the decimal point.
With the ‘g’ and ‘G’ format types, trailing zeros are suppressed, so the results may sometimes have fewer digits than the specified precision (as indicated above, the ‘#’ flag causes trailing zeros to be displayed).
The default precision is 6, so ‘%g’ is equivalent to ‘%.6g’, and would show the output to six significant digits. Similarly, ‘%e’ or ‘%f’ would show the output with six digits after the decimal point.
printf() function allows a precision of arbitrary size, whether or
not all of the digits are meaningful. With most compilers, the maximum
internal precision with
units is 15 decimal digits (or 13
With the --digits option, you are limited
to the maximum internal precision; with the --output-format
option, you may specify a precision greater than this, but it may not be
meaningful. In some cases, specifying excess precision can result in
rounding artifacts. For example, a pound is exactly 7000 grains, but
with the format ‘%.18g’, the output might be
You have: pound You want: grain * 6999.9999999999991 / 0.00014285714285714287
With the format ‘%.25g’ you might get the following:
You have: 1/3 You want: Definition: 0.333333333333333314829616256247
In this case the displayed value includes a series of digits that represent the underlying binary floating-point approximation to 1/3 but are not meaningful for the desired computation. In general, the result with excess precision is system dependent. The precision affects only the display of numbers; if a result relies on physical constants that are not known to the specified precision, the number of physically meaningful digits may be less than the number of digits shown.
See the documentation for
printf() for more detailed descriptions of the
The --output-format option is incompatible with the --exponential or --digits options; if the former is given in combination with either of the latter, the format is controlled by the last option given.