unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-4.1.3)
Page:
Section:
Apropos / Subsearch:
optional field

IEEE_FLAGS(3M)                                                  IEEE_FLAGS(3M)



NAME
       ieee_flags - mode and status function for IEEE standard arithmetic

SYNOPSIS
       #include <&lt;sys/ieeefp.h>&gt;

       int ieee_flags(action, mode, in, out)
       char *action, *mode, *in, **out;

DESCRIPTION
       This  function provides easy access to the modes and status required to
       fully exploit ANSI/IEEE Std 754-1985 arithmetic in a  C  program.   All
       arguments  are pointers to strings.  Results arising from invalid argu-
       ments and invalid combinations are undefined for efficiency.

       There are four types of action: get, set, clear  and  clearall.   There
       are  three  valid settings for mode, two corresponding to modes of IEEE
       arithmetic:

              direction      current rounding direction mode

              precision      current rounding precision mode

       and one corresponding to status of IEEE arithmetic:

              exception      accrued exception-occurred status

       There are fourteen types of in and out:

              nearest        round toward nearest

              tozero         round toward zero

              negative       round toward negative infinity

              positive       round toward positive infinity

              extended

              double

              single

              inexact

              division       division by zero exception

              underflow

              overflow

              invalid

              all            all five exceptions above

              common         invalid, overflow, and division exceptions

       Note: all and common only make sense with set or clear.

       For clearall, ieee_flags() returns 0 and restores all default modes and
       status.  Nothing will be assigned to out.  Thus

              char *mode, *out, *in;
              ieee_flags("clearall", mode, in, &&amp;out);

       set  rounding direction to nearest, rounding precision to extended, and
       all accrued exception-occurred status to zero.

       For clear, ieee_flags() returns 0 and restores the default mode or sta-
       tus.  Nothing will be assigned to out.  Thus

              char *out, *in;
              ieee_flags("clear", "direction", in, &&amp;out);       ... set rounding direction to round to nearest.

       For  set,  ieee_flags()  returns 0 if the action is successful and 1 if
       the corresponding  required  status  or  mode  is  not  available  (for
       instance,  not supported in hardware). Nothing will be assigned to out.
       Thus

              char *out, *in;
              ieee_flags ("set", "direction", "tozero", &&amp;out);  set rounding direction to round toward zero;

       For get, we have the following cases:

       Case 1: mode is direction.  In that case, out returns one of  the  four
       strings nearest, tozero, positive, negative, and ieee_flags() returns a
       value corresponding to out  according  to  the  enum  fp_direction_type
       defined in <&lt;sys/ieeefp.h>&gt;.

       Case  2: mode is precision.  In that case, out returns one of the three
       strings extended, double and single, and ieee_flags() returns  a  value
       corresponding to out according to the enum fp_precision_type defined in
       <&lt;sys/ieeefp.h>&gt;.

       Case 3: mode is exception.  In that case, out returns

              not available  if information on exception is not available.

              no exception   if no accrued exception.

              the accrued exception that has the highest priority according to
              the following list:

                     the exception named by in
                     invalid
                     overflow
                     division
                     underflow
                     inexact

       In  this  case  ieee_flags() returns a five or six bit value where each
       bit (see enum fp_exception_type in <&lt;sys/ieeefp.h>&gt;)  corresponds  to  an
       exception-occurred  accrued status flag: 0 = off, 1 = on.  The bit cor-
       responding to a particular exception varies  among  architectures  (see
       <&lt;sys/ieeefp.h>&gt;).

       Example:

              char *out; int k, ieee_flags();
              ieee_flags("clear", "exception", "all", &&amp;out);    /* clear all accrued exceptions */
              ...
              code that generates three exceptions: overflow, invalid, inexact
              ...
              k = ieee_flags("get", "exception", "overflow", &&amp;out);

       then out is overflow, and on a Sun-3, k is 25.



4th Berkeley Distribution         16 May 1989                   IEEE_FLAGS(3M)