New bitmap method SetRGBConversionFunction which can be used to
[tangerine.git] / compiler / mlib / w_powf.c
blob32ea0084ac8d1c777db7bb64cc36af622c41e0bb
1 /* w_powf.c -- float version of w_pow.c.
2 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
3 */
5 /*
6 * ====================================================
7 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
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 * ====================================================
16 #ifndef lint
17 static char rcsid[] = "$FreeBSD: src/lib/msun/src/w_powf.c,v 1.5 1999/08/28 00:07:07 peter Exp $";
18 #endif
21 * wrapper powf(x,y) return x**y
24 #include "math.h"
25 #include "math_private.h"
28 #ifdef __STDC__
29 float powf(float x, float y) /* wrapper powf */
30 #else
31 float powf(x,y) /* wrapper powf */
32 float x,y;
33 #endif
35 #ifdef _IEEE_LIBM
36 return __ieee754_powf(x,y);
37 #else
38 float z;
39 z=__ieee754_powf(x,y);
40 if(_LIB_VERSION == _IEEE_|| isnanf(y)) return z;
41 if(isnanf(x)) {
42 if(y==(float)0.0)
43 /* powf(NaN,0.0) */
44 return (float)__kernel_standard((double)x,(double)y,142);
45 else
46 return z;
48 if(x==(float)0.0){
49 if(y==(float)0.0)
50 /* powf(0.0,0.0) */
51 return (float)__kernel_standard((double)x,(double)y,120);
52 if(finitef(y)&&y<(float)0.0)
53 /* powf(0.0,negative) */
54 return (float)__kernel_standard((double)x,(double)y,123);
55 return z;
57 if(!finitef(z)) {
58 if(finitef(x)&&finitef(y)) {
59 if(isnanf(z))
60 /* powf neg**non-int */
61 return (float)__kernel_standard((double)x,(double)y,124);
62 else
63 /* powf overflow */
64 return (float)__kernel_standard((double)x,(double)y,121);
67 if(z==(float)0.0&&finitef(x)&&finitef(y))
68 /* powf underflow */
69 return (float)__kernel_standard((double)x,(double)y,122);
70 return z;
71 #endif