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