1 /* @(#)s_logb.c 5.1 93/09/24 */ 2 /* 3 * ==================================================== 4 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 5 * 6 * Developed at SunPro, a Sun Microsystems, Inc. business. 7 * Permission to use, copy, modify, and distribute this 8 * software is freely granted, provided that this notice 9 * is preserved. 10 * ==================================================== 11 */ 12 13 /* 14 * double logb(x) 15 * IEEE 754 logb. Included to pass IEEE test suite. Not recommend. 16 * Use ilogb instead. 17 */ 18 19 #include "math.h" 20 #include "math_private.h" 21 22 double 23 logb(double x) 24 { 25 int32_t lx,ix; 26 EXTRACT_WORDS(ix,lx,x); 27 ix &= 0x7fffffff; /* high |x| */ 28 if((ix|lx)==0) return -1.0/fabs(x); 29 if(ix>=0x7ff00000) return x*x; 30 if((ix>>=20)==0) /* IEEE 754 logb */ 31 return -1022.0; 32 else 33 return (double) (ix-1023); 34 } 35 DEF_STD(logb); 36