1 2 3 /* @(#)w_pow.c 5.2 93/10/01 */ 4 /* 5 * ==================================================== 6 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 7 * 8 * Developed at SunPro, a Sun Microsystems, Inc. business. 9 * Permission to use, copy, modify, and distribute this 10 * software is freely granted, provided that this notice 11 * is preserved. 12 * ==================================================== 13 */ 14 15 /* 16 * wrapper pow(x,y) return x**y 17 */ 18 19 #include "math.h" 20 #include "math_private.h" 21 22 23 #ifdef __STDC__ 24 double pow(double x, double y) /* wrapper pow */ 25 #else 26 double pow(x,y) /* wrapper pow */ 27 double x,y; 28 #endif 29 { 30 #ifdef _IEEE_LIBM 31 return __ieee754_pow(x,y); 32 #else 33 double z; 34 z=__ieee754_pow(x,y); 35 if(_LIB_VERSION == _IEEE_|| isnan(y)) return z; 36 if(isnan(x)) { 37 if(y==0.0) 38 return __kernel_standard(x,y,42); /* pow(NaN,0.0) */ 39 else 40 return z; 41 } 42 if(x==0.0){ 43 if(y==0.0) 44 return __kernel_standard(x,y,20); /* pow(0.0,0.0) */ 45 if(finite(y)&&y<0.0) 46 return __kernel_standard(x,y,23); /* pow(0.0,negative) */ 47 return z; 48 } 49 if(!finite(z)) { 50 if(finite(x)&&finite(y)) { 51 if(isnan(z)) 52 return __kernel_standard(x,y,24); /* pow neg**non-int */ 53 else 54 return __kernel_standard(x,y,21); /* pow overflow */ 55 } 56 } 57 if(z==0.0&&finite(x)&&finite(y)) 58 return __kernel_standard(x,y,22); /* pow underflow */ 59 return z; 60 #endif 61 } 62