t2ex/bsd_source/lib/libc/src_bsd/math/e_scalb.c | bare source | permlink (0.02 seconds) |
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: /* 14: * scalb(x, fn) is provide for 15: * passing various standard test suite. One 16: * should use scalbn() instead. 17: */ 18: 19: #include "math.h" 20: #include "math_private.h" 21: 22: #ifdef _SCALB_INT 23: double 24: scalb(double x, int fn) 25: { 26: return scalbn(x, fn); 27: } 28: 29: #else 30: 31: double 32: scalb(double x, double fn) 33: { 34: if (isnan(x)||isnan(fn)) return x*fn; 35: if (!finite(fn)) { 36: if(fn>0.0) return x*fn; 37: else return x/(-fn); 38: } 39: if (rint(fn)!=fn) return (fn-fn)/(fn-fn); 40: if ( fn > 65000.0) return scalbn(x, 65000); 41: if (-fn > 65000.0) return scalbn(x,-65000); 42: return scalbn(x,(int)fn); 43: } 44: #endif