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

glibc/2.7/math/e_scalbf.c

    1: /* e_scalbf.c -- float version of e_scalb.c.
    2:  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
    3:  */
    4: 
    5: /*
    6:  * ====================================================
    7:  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
    8:  *
    9:  * Developed at SunPro, a Sun Microsystems, Inc. business.
   10:  * Permission to use, copy, modify, and distribute this
   11:  * software is freely granted, provided that this notice
   12:  * is preserved.
   13:  * ====================================================
   14:  */
   15: 
   16: #if defined(LIBM_SCCS) && !defined(lint)
   17: static char rcsid[] = "$NetBSD: e_scalbf.c,v 1.3 1995/05/10 20:46:12 jtc Exp $";
   18: #endif
   19: 
   20: #include <fenv.h>
   21: #include <math.h>
   22: #include "math_private.h"
   23: 
   24: #ifdef _SCALB_INT
   25: #ifdef __STDC__
   26:         float __ieee754_scalbf(float x, int fn)
   27: #else
   28:         float __ieee754_scalbf(x,fn)
   29:         float x; int fn;
   30: #endif
   31: #else
   32: #ifdef __STDC__
   33:         float __ieee754_scalbf(float x, float fn)
   34: #else
   35:         float __ieee754_scalbf(x,fn)
   36:         float x, fn;
   37: #endif
   38: #endif
   39: {
   40: #ifdef _SCALB_INT
   41:         return __scalbnf(x,fn);
   42: #else
   43:         if (__isnanf(x)||__isnanf(fn)) return x*fn;
   44:         if (!__finitef(fn)) {
   45:             if(fn>(float)0.0) return x*fn;
   46:             else if (x == 0)
   47:               return x;
   48:             else if (!__finitef (x))
   49:               {
   50: # ifdef FE_INVALID
   51:                 feraiseexcept (FE_INVALID);
   52: # endif
   53:                 return __nanf ("");
   54:               }
   55:             else       return x/(-fn);
   56:         }
   57:         if (__rintf(fn)!=fn)
   58:           {
   59: # ifdef FE_INVALID
   60:             feraiseexcept (FE_INVALID);
   61: # endif
   62:             return __nanf ("");
   63:           }
   64:         if ( fn > (float)65000.0) return __scalbnf(x, 65000);
   65:         if (-fn > (float)65000.0) return __scalbnf(x,-65000);
   66:         return __scalbnf(x,(int)fn);
   67: #endif
   68: }
Syntax (Markdown)