xref: /aosp_15_r20/external/fdlibm/w_scalb.c (revision 1e651e1ef2b613db2c4b29ae59c1de74cf0222ae)
1*1e651e1eSRoland Levillain 
2*1e651e1eSRoland Levillain /* @(#)w_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  * wrapper ieee_scalb(double x, double 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 #include <errno.h>
23*1e651e1eSRoland Levillain 
24*1e651e1eSRoland Levillain #ifdef __STDC__
25*1e651e1eSRoland Levillain #ifdef _SCALB_INT
ieee_scalb(double x,int fn)26*1e651e1eSRoland Levillain 	double ieee_scalb(double x, int fn)		/* wrapper scalb */
27*1e651e1eSRoland Levillain #else
28*1e651e1eSRoland Levillain 	double ieee_scalb(double x, double fn)	/* wrapper scalb */
29*1e651e1eSRoland Levillain #endif
30*1e651e1eSRoland Levillain #else
31*1e651e1eSRoland Levillain 	double ieee_scalb(x,fn)			/* wrapper scalb */
32*1e651e1eSRoland Levillain #ifdef _SCALB_INT
33*1e651e1eSRoland Levillain 	double x; int fn;
34*1e651e1eSRoland Levillain #else
35*1e651e1eSRoland Levillain 	double x,fn;
36*1e651e1eSRoland Levillain #endif
37*1e651e1eSRoland Levillain #endif
38*1e651e1eSRoland Levillain {
39*1e651e1eSRoland Levillain #ifdef _IEEE_LIBM
40*1e651e1eSRoland Levillain 	return __ieee754_scalb(x,fn);
41*1e651e1eSRoland Levillain #else
42*1e651e1eSRoland Levillain 	double z;
43*1e651e1eSRoland Levillain 	z = __ieee754_scalb(x,fn);
44*1e651e1eSRoland Levillain 	if(_LIB_VERSION == _IEEE_) return z;
45*1e651e1eSRoland Levillain 	if(!(ieee_finite(z)||ieee_isnan(z))&&ieee_finite(x)) {
46*1e651e1eSRoland Levillain 	    return __kernel_standard(x,(double)fn,32); /* scalb overflow */
47*1e651e1eSRoland Levillain 	}
48*1e651e1eSRoland Levillain 	if(z==0.0&&z!=x) {
49*1e651e1eSRoland Levillain 	    return __kernel_standard(x,(double)fn,33); /* scalb underflow */
50*1e651e1eSRoland Levillain 	}
51*1e651e1eSRoland Levillain #ifndef _SCALB_INT
52*1e651e1eSRoland Levillain 	if(!ieee_finite(fn)) errno = ERANGE;
53*1e651e1eSRoland Levillain #endif
54*1e651e1eSRoland Levillain 	return z;
55*1e651e1eSRoland Levillain #endif
56*1e651e1eSRoland Levillain }
57