Home | History | Annotate | Line # | Download | only in src
s_logb.c revision 1.1
      1 
      2 /* @(#)s_logb.c 5.1 93/09/24 */
      3 /*
      4  * ====================================================
      5  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
      6  *
      7  * Developed at SunPro, a Sun Microsystems, Inc. business.
      8  * Permission to use, copy, modify, and distribute this
      9  * software is freely granted, provided that this notice
     10  * is preserved.
     11  * ====================================================
     12  */
     13 
     14 /*
     15  * double logb(x)
     16  * IEEE 754 logb. Included to pass IEEE test suite. Not recommend.
     17  * Use ilogb instead.
     18  */
     19 
     20 #include "fdlibm.h"
     21 
     22 #ifdef __STDC__
     23 static const double one = 1.0;
     24 #else
     25 static double one = 1.0;
     26 #endif
     27 
     28 #ifdef __STDC__
     29 	double logb(double x)
     30 #else
     31 	double logb(x)
     32 	double x;
     33 #endif
     34 {
     35 	int n0,lx,ix;
     36 	n0 = ((*(int*)&one)>>29)^1;
     37 	ix = (*(n0+(int*)&x))&0x7fffffff;	/* high |x| */
     38 	lx = *(1-n0+(int*)&x);			/* low x */
     39 	if((ix|lx)==0) return -1.0/fabs(x);
     40 	if(ix>=0x7ff00000) return x*x;
     41 	if((ix>>=20)==0) 			/* IEEE 754 logb */
     42 		return -1022.0;
     43 	else
     44 		return (double) (ix-1023);
     45 }
     46