(linenum→info "unix/slp.c:2238")

glibc/2.7/math/e_scalb.c

    1: /* @(#)e_scalb.c 5.1 93/09/24 */
    2: /*
    3:  * ====================================================
    4:  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
    5:  *
    6:  * Developed at SunPro, a Sun Microsystems, Inc. business.
    7:  * Permission to use, copy, modify, and distribute this
    8:  * software is freely granted, provided that this notice
    9:  * is preserved.
   10:  * ====================================================
   11:  */
   12: 
   13: #if defined(LIBM_SCCS) && !defined(lint)
   14: static char rcsid[] = "$NetBSD: e_scalb.c,v 1.6 1995/05/10 20:46:09 jtc Exp $";
   15: #endif
   16: 
   17: /*
   18:  * __ieee754_scalb(x, fn) is provide for
   19:  * passing various standard test suite. One
   20:  * should use scalbn() instead.
   21:  */
   22: 
   23: #include <fenv.h>
   24: #include <math.h>
   25: #include "math_private.h"
   26: 
   27: #ifdef _SCALB_INT
   28: #ifdef __STDC__
   29:         double __ieee754_scalb(double x, int fn)
   30: #else
   31:         double __ieee754_scalb(x,fn)
   32:         double x; int fn;
   33: #endif
   34: #else
   35: #ifdef __STDC__
   36:         double __ieee754_scalb(double x, double fn)
   37: #else
   38:         double __ieee754_scalb(x,fn)
   39:         double x, fn;
   40: #endif
   41: #endif
   42: {
   43: #ifdef _SCALB_INT
   44:         return __scalbn(x,fn);
   45: #else
   46:         if (__isnan(x)||__isnan(fn)) return x*fn;
   47:         if (!__finite(fn)) {
   48:             if(fn>0.0) return x*fn;
   49:             else if (x == 0)
   50:               return x;
   51:             else if (!__finite (x))
   52:               {
   53: # ifdef FE_INVALID
   54:                 feraiseexcept (FE_INVALID);
   55: # endif
   56:                 return __nan ("");
   57:               }
   58:             else       return x/(-fn);
   59:         }
   60:         if (__rint(fn)!=fn)
   61:           {
   62: # ifdef FE_INVALID
   63:             feraiseexcept (FE_INVALID);
   64: # endif
   65:             return __nan ("");
   66:           }
   67:         if ( fn > 65000.0) return __scalbn(x, 65000);
   68:         if (-fn > 65000.0) return __scalbn(x,-65000);
   69:         return __scalbn(x,(int)fn);
   70: #endif
   71: }
Syntax (Markdown)