s_frexpf.c - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       s_frexpf.c (1118B)
       ---
            1 /* s_frexpf.c -- float version of s_frexp.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/s_frexpf.c,v 1.8 2002/05/28 18:15:04 alfred Exp $";
           18 #endif
           19 
           20 #include "math.h"
           21 #include "math_private.h"
           22 
           23 static const float
           24 two25 =  3.3554432000e+07; /* 0x4c000000 */
           25 
           26 float
           27 frexpf(float x, int *eptr)
           28 {
           29         int32_t hx,ix;
           30         GET_FLOAT_WORD(hx,x);
           31         ix = 0x7fffffff&hx;
           32         *eptr = 0;
           33         if(ix>=0x7f800000||(ix==0)) return x;        /* 0,inf,nan */
           34         if (ix<0x00800000) {                /* subnormal */
           35             x *= two25;
           36             GET_FLOAT_WORD(hx,x);
           37             ix = hx&0x7fffffff;
           38             *eptr = -25;
           39         }
           40         *eptr += (ix>>23)-126;
           41         hx = (hx&0x807fffff)|0x3f000000;
           42         *(int*)&x = hx;
           43         return x;
           44 }