Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ flt2dec(3) — Amiga System V Release 4 Version 1.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

econvert(3)

printf(3S)



floating_to_decimal(3) C LIBRARY FUNCTIONS floating_to_decimal(3)



NAME
     floatingtodecimal:  singletodecimal,  doubletodecimal,
     extendedtodecimal   -   convert  floating-point  value  to
     decimal record

SYNOPSIS
     cc [ flag... ] file ...  -lucb

     #include <floatingpoint.h>
     void singletodecimal(px, pm, pd, ps)
     single *px ;
     decimalmode *pm;
     decimalrecord *pd;
     fpexceptionfieldtype *ps;
     void doubletodecimal(px, pm, pd, ps)
     double *px ;
     decimalmode *pm;
     decimalrecord *pd;
     fpexceptionfieldtype *ps;
     void extendedtodecimal(px, pm, pd, ps)
     extended *px ;
     decimalmode *pm;
     decimalrecord *pd;
     fpexceptionfieldtype *ps;

DESCRIPTION
     The floatingtodecimal 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

          (pd->sign)*(pd->ds)*10**(pd->exponent) is  a  correctly
          rounded  approximation  to *px. pd->ds has at least one
          and no more than
           DECIMALSTRINGLENGTH-1 significant digits because one
          character  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     DECIMALSTRINGLENGTH.       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  neces-
          sary  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   >=



             Last change: BSD Compatibility Package             1




floating_to_decimal(3) C LIBRARY FUNCTIONS floating_to_decimal(3)



          DECIMALSTRINGLENGTH,  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 pm->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(3), fconvert, gconvert, printf(3S),
          and sprintf, all use doubletodecimal.

SEE ALSO
     econvert(3).
     printf(3S) in the Programmer's Reference Manual.





































             Last change: BSD Compatibility Package             2



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026