[BACK]Return to s_frexpf.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libm / src

Annotation of src/lib/libm/src/s_frexpf.c, Revision 1.10

1.1       jtc         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
1.7       simonb     11:  * software is freely granted, provided that this notice
1.1       jtc        12:  * is preserved.
                     13:  * ====================================================
                     14:  */
                     15:
1.6       lukem      16: #include <sys/cdefs.h>
1.3       jtc        17: #if defined(LIBM_SCCS) && !defined(lint)
1.10    ! drochner   18: __RCSID("$NetBSD: s_frexpf.c,v 1.9 2002/12/05 16:03:42 scw Exp $");
1.1       jtc        19: #endif
                     20:
                     21: #include "math.h"
                     22: #include "math_private.h"
                     23:
                     24: static const float
                     25: two25 =  3.3554432000e+07; /* 0x4c000000 */
                     26:
1.8       wiz        27: float
                     28: frexpf(float x, int *eptr)
1.1       jtc        29: {
1.2       jtc        30:        int32_t hx,ix;
1.1       jtc        31:        GET_FLOAT_WORD(hx,x);
                     32:        ix = 0x7fffffff&hx;
                     33:        *eptr = 0;
                     34:        if(ix>=0x7f800000||(ix==0)) return x;   /* 0,inf,nan */
                     35:        if (ix<0x00800000) {            /* subnormal */
                     36:            x *= two25;
                     37:            GET_FLOAT_WORD(hx,x);
                     38:            ix = hx&0x7fffffff;
                     39:            *eptr = -25;
                     40:        }
                     41:        *eptr += (ix>>23)-126;
                     42:        hx = (hx&0x807fffff)|0x3f000000;
1.10    ! drochner   43:        SET_FLOAT_WORD(x,hx);
1.1       jtc        44:        return x;
                     45: }

CVSweb <webmaster@jp.NetBSD.org>