quadruple_to_decimal(3C)
NAME
floating_to_decimal, single_to_decimal, double_to_decimal,
extended_to_decimal, quadruple_to_decimal - convert
floating-point value to decimal record
SYNOPSIS
#include <floatingpoint.h>
void single_to_decimal(single *px, decimal_mode *pm,
decimal_record *pd, fp_exception_field_type *ps);
void double_to_decimal(double *px, decimal_mode *pm,
decimal_record *pd, fp_exception_field_type *ps);
void extended_to_decimal(extended *px, decimal_mode *pm,
decimal_record *pd, fp_exception_field_type *ps);
void quadruple_to_decimal(quadruple *px, decimal_mode *pm,
decimal_record *pd, fp_exception_field_type *ps);
DESCRIPTION
The floating_to_decimal() functions convert the floating-
point value at *px into a decimal record at *pd, observing
the modes specified in *pm and setting exceptions in *ps. If
there are no IEEE exceptions, *ps will be zero.
If *px is zero, infinity, or NaN, then only pd->sign and
pd->fpclass are set. Otherwise pd->exponent and pd->ds are
also set so that
(sig)*(pd->ds)*10**(pd->exponent)
is a correctly rounded approximation to *px, where sig is
+1 or -1, depending upon whether pd->sign is 0 or -1. pd-
>ds has at least one and no more than
DECIMAL_STRING_LENGTH-1 significant digits because one char-
acter is used to terminate the string with a NULL.
pd->ds is correctly rounded according to the IEEE rounding
modes in pm->rd. *ps has fp_inexact set if the result was
inexact, and has fp_overflow set if the string result does
not fit in pd->ds because of the limitation
DECIMAL_STRING_LENGTH.
If pm->df == floating_form, then pd->ds always contains pm-
>ndigits significant digits. Thus if *px == 12.34 and pm-
>ndigits == 8, then pd->ds will contain 12340000 and pd-
>exponent will contain -6.
If pm->df == fixed_form and pm->ndigits >= 0, then pd->ds
always contains pm->ndigits after the point and as many
digits as necessary before the point. Since the latter is
not known in advance, the total number of digits required is
returned in pd->ndigits; if that number >=
DECIMAL_STRING_LENGTH, then ds is undefined. pd->exponent
always gets -pm->ndigits. Thus if *px == 12.34 and pm-
>ndigits == 1, then pd->ds gets 123, pd->exponent gets -1,
and pd->ndigits gets 3.
If pm->df == fixed_form and pm->ndigits < 0, then pd->ds
always contains -pm->ndigits trailing zeros; in other words,
rounding occurs -pm->ndigits to the left of the decimal
point, but the digits rounded away are retained as zeros.
The total number of digits required is in pd->ndigits. pd-
>exponent always gets 0. Thus if *px == 12.34 and pm-
>ndigits == -1, then pd->ds gets 10, pd->exponent gets 0,
and pd->ndigits gets 2.
pd->more is not used.
econvert(3C), fconvert(3C), gconvert(3C), printf(3C), and
sprintf(3C) all use double_to_decimal().
ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| MT-Level | MT-Safe |
|_____________________________|_____________________________|
SEE ALSO
econvert(3C), fconvert(3C), gconvert(3C), printf(3C),
sprintf(3C), attributes(5)
Man(1) output converted with
man2html