1 /* @(#)s_log2.c 5.1 93/09/24 */
2 /* Modification from s_exp10.c Yaakov Selkowitz 2009.  */
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 /*
16 FUNCTION
17 	<<log2>>, <<log2f>>---base 2 logarithm
18 INDEX
19 	log2
20 INDEX
21 	log2f
22 
23 SYNOPSIS
24 	#include <math.h>
25 	double log2(double <[x]>);
26 	float log2f(float <[x]>);
27 
28 DESCRIPTION
29 The <<log2>> functions compute the base-2 logarithm of <[x]>.  A domain error
30 occurs if the argument is less than zero.  A range error occurs if the
31 argument is zero.
32 
33 The Newlib implementations are not full, intrinisic calculations, but
34 rather are derivatives based on <<log>>.  (Accuracy might be slightly off from
35 a direct calculation.)  In addition to functions, they are also implemented as
36 macros defined in math.h:
37 . #define log2(x) (log (x) / _M_LN2)
38 . #define log2f(x) (logf (x) / (float) _M_LN2)
39 To use the functions instead, just undefine the macros first.
40 
41 RETURNS
42 The <<log2>> functions return
43 @ifnottex
44 <<log base-2(<[x]>)>>
45 @end ifnottex
46 @tex
47 $log_2(x)$
48 @end tex
49 on success.
50 When <[x]> is zero, the
51 returned value is <<-HUGE_VAL>> and <<errno>> is set to <<ERANGE>>.
52 When <[x]> is negative, the returned value is NaN (not a number) and
53 <<errno>> is set to <<EDOM>>.
54 
55 PORTABILITY
56 C99, POSIX, System V Interface Definition (Issue 6).
57 */
58 
59 /*
60  * wrapper log2(x)
61  */
62 
63 #include "fdlibm.h"
64 #if __OBSOLETE_MATH_DOUBLE
65 #include <errno.h>
66 #include <math.h>
67 #undef log2
68 
69 #ifdef _NEED_FLOAT64
70 
71 __float64
log264(__float64 x)72 log264(__float64 x)		/* wrapper log2 */
73 {
74     return (log64(x) / (__float64) _M_LN2_LD);
75 }
76 
77 _MATH_ALIAS_d_d(log2)
78 
79 #endif /* _NEED_FLOAT64 */
80 #else
81 #include "log2.c"
82 #endif /* __OBSOLETE_MATH_DOUBLE */
83