1 /* w_scalbf.c -- float version of w_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 #include <sys/cdefs.h> 17 #if defined(LIBM_SCCS) && !defined(lint) 18 __RCSID("$NetBSD: w_scalbf.c,v 1.4 1997/10/09 11:36:04 lukem Exp $"); 19 #endif 20 21 /* 22 * wrapper scalbf(float x, float fn) is provide for 23 * passing various standard test suite. One 24 * should use scalbn() instead. 25 */ 26 27 #include "math.h" 28 #include "math_private.h" 29 30 #include <errno.h> 31 32 #ifdef __STDC__ 33 #ifdef _SCALB_INT 34 float scalbf(float x, int fn) /* wrapper scalbf */ 35 #else 36 float scalbf(float x, float fn) /* wrapper scalbf */ 37 #endif 38 #else 39 float scalbf(x,fn) /* wrapper scalbf */ 40 #ifdef _SCALB_INT 41 float x; int fn; 42 #else 43 float x,fn; 44 #endif 45 #endif 46 { 47 #ifdef _IEEE_LIBM 48 return __ieee754_scalbf(x,fn); 49 #else 50 float z; 51 z = __ieee754_scalbf(x,fn); 52 if(_LIB_VERSION == _IEEE_) return z; 53 if(!(finitef(z)||isnanf(z))&&finitef(x)) { 54 /* scalbf overflow */ 55 return (float)__kernel_standard((double)x,(double)fn,132); 56 } 57 if(z==(float)0.0&&z!=x) { 58 /* scalbf underflow */ 59 return (float)__kernel_standard((double)x,(double)fn,133); 60 } 61 #ifndef _SCALB_INT 62 if(!finitef(fn)) errno = ERANGE; 63 #endif 64 return z; 65 #endif 66 } 67