• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 
3 /* @(#)w_pow.c 1.3 95/01/18 */
4 /*
5  * ====================================================
6  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
7  *
8  * Developed at SunSoft, 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 ieee_pow(x,y) return x**y
17  */
18 
19 #include "fdlibm.h"
20 
21 
22 #ifdef __STDC__
ieee_pow(double x,double y)23 	double ieee_pow(double x, double y)	/* wrapper pow */
24 #else
25 	double ieee_pow(x,y)			/* wrapper pow */
26 	double x,y;
27 #endif
28 {
29 #ifdef _IEEE_LIBM
30 	return  __ieee754_pow(x,y);
31 #else
32 	double z;
33 	z=__ieee754_pow(x,y);
34 	if(_LIB_VERSION == _IEEE_|| ieee_isnan(y)) return z;
35 	if(ieee_isnan(x)) {
36 	    if(y==0.0)
37 	        return __kernel_standard(x,y,42); /* ieee_pow(NaN,0.0) */
38 	    else
39 		return z;
40 	}
41 	if(x==0.0){
42 	    if(y==0.0)
43 	        return __kernel_standard(x,y,20); /* ieee_pow(0.0,0.0) */
44 	    if(ieee_finite(y)&&y<0.0)
45 	        return __kernel_standard(x,y,23); /* ieee_pow(0.0,negative) */
46 	    return z;
47 	}
48 	if(!ieee_finite(z)) {
49 	    if(ieee_finite(x)&&ieee_finite(y)) {
50 	        if(ieee_isnan(z))
51 	            return __kernel_standard(x,y,24); /* pow neg**non-int */
52 	        else
53 	            return __kernel_standard(x,y,21); /* pow overflow */
54 	    }
55 	}
56 	if(z==0.0&&ieee_finite(x)&&ieee_finite(y))
57 	    return __kernel_standard(x,y,22); /* pow underflow */
58 	return z;
59 #endif
60 }
61