(root)/
glibc-2.38/
sysdeps/
ieee754/
flt-32/
s_frexpf.c
       1  /* s_frexpf.c -- float version of s_frexp.c.
       2   */
       3  
       4  /*
       5   * ====================================================
       6   * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
       7   *
       8   * Developed at SunPro, a Sun Microsystems, Inc. business.
       9   * Permission to use, copy, modify, and distribute this
      10   * software is freely granted, provided that this notice
      11   * is preserved.
      12   * ====================================================
      13   */
      14  
      15  #if defined(LIBM_SCCS) && !defined(lint)
      16  static char rcsid[] = "$NetBSD: s_frexpf.c,v 1.5 1995/05/10 20:47:26 jtc Exp $";
      17  #endif
      18  
      19  #include <math.h>
      20  #include <math_private.h>
      21  #include <libm-alias-float.h>
      22  
      23  static const float
      24  two25 =  3.3554432000e+07; /* 0x4c000000 */
      25  
      26  float __frexpf(float x, int *eptr)
      27  {
      28  	int32_t hx,ix;
      29  	GET_FLOAT_WORD(hx,x);
      30  	ix = 0x7fffffff&hx;
      31  	*eptr = 0;
      32  	if(ix>=0x7f800000||(ix==0)) return x + x;	/* 0,inf,nan */
      33  	if (ix<0x00800000) {		/* subnormal */
      34  	    x *= two25;
      35  	    GET_FLOAT_WORD(hx,x);
      36  	    ix = hx&0x7fffffff;
      37  	    *eptr = -25;
      38  	}
      39  	*eptr += (ix>>23)-126;
      40  	hx = (hx&0x807fffff)|0x3f000000;
      41  	SET_FLOAT_WORD(x,hx);
      42  	return x;
      43  }
      44  libm_alias_float (__frexp, frexp)