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