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>