w_powf.c - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       w_powf.c (1802B)
       ---
            1 /* w_powf.c -- float version of w_pow.c.
            2  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
            3  */
            4 
            5 /*
            6  * ====================================================
            7  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
            8  *
            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  * ====================================================
           14  */
           15 
           16 #ifndef lint
           17 static char rcsid[] = "$FreeBSD: src/lib/msun/src/w_powf.c,v 1.7 2002/05/28 18:15:04 alfred Exp $";
           18 #endif
           19 
           20 /*
           21  * wrapper powf(x,y) return x**y
           22  */
           23 
           24 #include "math.h"
           25 #include "math_private.h"
           26 
           27 
           28 float
           29 powf(float x, float y)        /* wrapper powf */
           30 {
           31 #ifdef _IEEE_LIBM
           32         return  __ieee754_powf(x,y);
           33 #else
           34         float z;
           35         z=__ieee754_powf(x,y);
           36         if(_LIB_VERSION == _IEEE_|| isnanf(y)) return z;
           37         if(isnanf(x)) {
           38             if(y==(float)0.0)
           39                 /* powf(NaN,0.0) */
           40                 return (float)__kernel_standard((double)x,(double)y,142);
           41             else
           42                 return z;
           43         }
           44         if(x==(float)0.0){
           45             if(y==(float)0.0)
           46                 /* powf(0.0,0.0) */
           47                 return (float)__kernel_standard((double)x,(double)y,120);
           48             if(finitef(y)&&y<(float)0.0)
           49                 /* powf(0.0,negative) */
           50                 return (float)__kernel_standard((double)x,(double)y,123);
           51             return z;
           52         }
           53         if(!finitef(z)) {
           54             if(finitef(x)&&finitef(y)) {
           55                 if(isnanf(z))
           56                     /* powf neg**non-int */
           57                     return (float)__kernel_standard((double)x,(double)y,124);
           58                 else
           59                     /* powf overflow */
           60                     return (float)__kernel_standard((double)x,(double)y,121);
           61             }
           62         }
           63         if(z==(float)0.0&&finitef(x)&&finitef(y))
           64             /* powf underflow */
           65             return (float)__kernel_standard((double)x,(double)y,122);
           66         return z;
           67 #endif
           68 }