Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ fpgetround(S) — System V/386 Software Development System 3.2.2b

Media Vault

Software Library

Restoration Projects

Artifacts Sought



     FPGETROUND(S)             UNIX System V             FPGETROUND(S)



     Name
          fpgetround, fpsetround, fpgetmask, fpsetmask, fpgetsticky,
          fpsetsticky - IEEE floating point environment control

     Syntax
          #include <ieeefp.h>

          typedef enum {
          FP_RN=0,   /* round to nearest */
          FP_RM,     /* round to minus */
          FP_RP,     /* round to plus */
          FP_RZ,     /* round to zero (truncate) */
          } fp_rnd;

          fp_rnd fpgetround();

          fp_rnd fpsetround(rnd_dir)
          fp_rnd rnd_dir;

          #define  fp_except     int
          #define  FP_X_INV 0x01 /* invalid operation exception*/
          #define  FP_X_OFL 0x08 /* overflow exception*/
          #define  FP_X_UFL 0x10 /* underflow exception*/
          #define  FP_X_DZ  0x04 /* divide-by-zero exception*/
          #define  FP_X_IMP 0x20 /* imprecise (loss of precision)*/
          #define  FP_X_DNML     0x02/* denormalization exception */

          fp_except fpgetmask();

          fp_except fpsetmask(mask);
          fp_except mask;

          fp_except fpgetsticky();

          fp_except fpsetsticky(sticky);
          fp_except sticky;

     Description
          There are six floating point exceptions: divide-by-zero,
          overflow, underflow, imprecise (inexact) result,
          denormalization, and invalid operation.  When a floating
          point exception occurs, the corresponding sticky bit is set
          (C), and if the mask bit is enabled (C), the trap takes
          place.  These routines let the user change the behavior on
          occurrence of any of these exceptions, as well as change the
          rounding mode for floating point operations.

          fpgetround() returns the current rounding mode.

          fpsetround() sets the rounding mode and returns the previous
          rounding mode.

          fpgetmask() returns the current exception masks.

          fpsetmask() sets the exception masks and returns the
          previous setting.

          fpgetsticky() returns the current exception sticky flags.

          fpsetsticky() sets (clears) the exception sticky flags and
          returns the previous setting.

          The default environment on the Intel 80386 processor family
          is:

               Rounding mode set to nearest(FP_RN),
               Divide-by-zero,
               Floating point overflow, and
               Invalid  operation traps enabled.

     See Also
          isnan(S)

     Warnings
          fpsetsticky() modifies all sticky flags. fpsetmask() changes
          all mask bits.

          C requires truncation (round to zero) for floating point to
          integral conversions.  The current rounding mode has no
          effect on these conversions.

     Notes
          One must clear the sticky bit to recover from the trap and
          to proceed.  If the sticky bit is not cleared before the
          next floating point instruction is executed, a wrong
          exception type may be signaled.

          For the same reason, when calling fpsetmask() the user
          should make sure that the sticky bit corresponding to the
          exception being enabled is cleared.

                                                (printed 6/20/89)



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