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