1*1e651e1eSRoland Levillain 2*1e651e1eSRoland Levillain /* @(#)e_scalb.c 1.3 95/01/18 */ 3*1e651e1eSRoland Levillain /* 4*1e651e1eSRoland Levillain * ==================================================== 5*1e651e1eSRoland Levillain * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 6*1e651e1eSRoland Levillain * 7*1e651e1eSRoland Levillain * Developed at SunSoft, a Sun Microsystems, Inc. business. 8*1e651e1eSRoland Levillain * Permission to use, copy, modify, and distribute this 9*1e651e1eSRoland Levillain * software is freely granted, provided that this notice 10*1e651e1eSRoland Levillain * is preserved. 11*1e651e1eSRoland Levillain * ==================================================== 12*1e651e1eSRoland Levillain */ 13*1e651e1eSRoland Levillain 14*1e651e1eSRoland Levillain /* 15*1e651e1eSRoland Levillain * __ieee754_scalb(x, fn) is provide for 16*1e651e1eSRoland Levillain * passing various standard test suite. One 17*1e651e1eSRoland Levillain * should use ieee_scalbn() instead. 18*1e651e1eSRoland Levillain */ 19*1e651e1eSRoland Levillain 20*1e651e1eSRoland Levillain #include "fdlibm.h" 21*1e651e1eSRoland Levillain 22*1e651e1eSRoland Levillain #ifdef _SCALB_INT 23*1e651e1eSRoland Levillain #ifdef __STDC__ __ieee754_scalb(double x,int fn)24*1e651e1eSRoland Levillain double __ieee754_scalb(double x, int fn) 25*1e651e1eSRoland Levillain #else 26*1e651e1eSRoland Levillain double __ieee754_scalb(x,fn) 27*1e651e1eSRoland Levillain double x; int fn; 28*1e651e1eSRoland Levillain #endif 29*1e651e1eSRoland Levillain #else 30*1e651e1eSRoland Levillain #ifdef __STDC__ 31*1e651e1eSRoland Levillain double __ieee754_scalb(double x, double fn) 32*1e651e1eSRoland Levillain #else 33*1e651e1eSRoland Levillain double __ieee754_scalb(x,fn) 34*1e651e1eSRoland Levillain double x, fn; 35*1e651e1eSRoland Levillain #endif 36*1e651e1eSRoland Levillain #endif 37*1e651e1eSRoland Levillain { 38*1e651e1eSRoland Levillain #ifdef _SCALB_INT 39*1e651e1eSRoland Levillain return ieee_scalbn(x,fn); 40*1e651e1eSRoland Levillain #else 41*1e651e1eSRoland Levillain if (ieee_isnan(x)||ieee_isnan(fn)) return x*fn; 42*1e651e1eSRoland Levillain if (!ieee_finite(fn)) { 43*1e651e1eSRoland Levillain if(fn>0.0) return x*fn; 44*1e651e1eSRoland Levillain else return x/(-fn); 45*1e651e1eSRoland Levillain } 46*1e651e1eSRoland Levillain if (ieee_rint(fn)!=fn) return (fn-fn)/(fn-fn); 47*1e651e1eSRoland Levillain if ( fn > 65000.0) return ieee_scalbn(x, 65000); 48*1e651e1eSRoland Levillain if (-fn > 65000.0) return ieee_scalbn(x,-65000); 49*1e651e1eSRoland Levillain return ieee_scalbn(x,(int)fn); 50*1e651e1eSRoland Levillain #endif 51*1e651e1eSRoland Levillain } 52