INFNAN(3M)                                                          INFNAN(3M)


NAME
       infnan - signals invalid floating-point operations on a VAX (temporary)

SYNOPSIS
       #include <math.h>

       double infnan(iarg)
       int iarg;

DESCRIPTION
       At some time in the future,  some  of  the  useful  properties  of  the
       Infinities  and NaNs in the IEEE standard 754 for Binary Floating-Point
       Arithmetic will be simulated in UNIX  on  the  DEC  VAX  by  using  its
       Reserved Operands.  Meanwhile, the Invalid, Overflow and Divide-by-Zero
       exceptions of the IEEE standard are being  approximated  on  a  VAX  by
       calls to a procedure infnan in appropriate places in libm.  When better
       exception-handling is implemented in UNIX, only infnan among the  codes
       in  libm  will  have to be changed.  And users of libm can design their
       own infnan now to insulate themselves from future changes.

       Whenever an elementary function code in libm has to simulate one of the
       aforementioned IEEE exceptions, it calls infnan(iarg) with an appropri‐
       ate value of iarg.  Then a reserved operand  fault  stops  computation.
       But  infnan  could  be  replaced  by a function with the same name that
       returns some plausible value, assigns an apt value to the global  vari‐
       able  errno,  and  allows  computation  to  resume.  Alternatively, the
       Reserved Operand Fault Handler could be changed to respond by returning
       that plausible value, etc.  instead of aborting.

       In  the table below, the first two columns show various exceptions sig‐
       naled by the IEEE standard, and the default result it prescribes.   The
       third  column  shows  what  value is given to iarg by functions in libm
       when they invoke infnan(iarg) under analogous circumstances on  a  VAX.
       Currently  infnan stops computation under all those circumstances.  The
       last two columns offer an alternative; they suggest a setting for errno
       and  a value for a revised infnan to return.  And a C program to imple‐
       ment that suggestion follows.
              IEEE      IEEE
              Signal    Default   iarg    errno             infnan
              __________________________________________________
              Invalid   NaN       EDOM    EDOM              0
              Overflow  ±Infinity ERANGE  ERANGE            HUGE
              Div-by-0  ±Infinity ±ERANGE ERANGE or EDOM    ±HUGE
                        (HUGE = 1.7e38 ... nearly  2.0**127)

       ALTERNATIVE  infnan:
       #include   <math.h>
       #include   <errno.h>
       extern int errno ;
       double     infnan(iarg)
       int        iarg ;
       {
                  switch(iarg) {
                  case      ERANGE: errno = ERANGE; return(HUGE);
                  case     -ERANGE: errno = EDOM;   return(-HUGE);
                  default:          errno = EDOM;   return(0);
                  }
       }

SEE ALSO
       math(3M), intro(2), signal(3).

       ERANGE and EDOM are defined in <errno.h>.  See intro(2) for explanation
       of EDOM and ERANGE.


4.3 Berkeley Distribution        May 27, 1986                       INFNAN(3M)
 
Generated: 2016-12-26
Generated by man2html V0.25
page hit count: 641
Valid CSS Valid XHTML 1.0 Strict