This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: log2, log2f


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Corinna Vinschen wrote:
> First declare the function, then define the macro in the same header.
> In the source, undef the function name.  This is also done for stdio
> functions like getchar, getwchar, for instance.

Like this?


Yaakov

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEAREIAAYFAknBLMsACgkQpiWmPGlmQSM75wCgoUb9Zt1+P7E/kJDiT9alPJZw
CIwAoLopTThoNSG/P6BHsW16bEbPQw7w
=uwQh
-----END PGP SIGNATURE-----
Index: libc/include/math.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/math.h,v
retrieving revision 1.33
diff -u -r1.33 math.h
--- libc/include/math.h	23 Apr 2008 23:10:54 -0000	1.33
+++ libc/include/math.h	18 Mar 2009 01:40:23 -0000
@@ -250,6 +250,7 @@
 extern double lgamma _PARAMS((double));
 extern double erf _PARAMS((double));
 extern double erfc _PARAMS((double));
+extern double log2 _PARAMS((double));
 #define log2(x) (log (x) / _M_LOG2_E)
 
 #ifndef __math_68881
@@ -328,6 +329,7 @@
 extern float lgammaf _PARAMS((float));
 extern float erff _PARAMS((float));
 extern float erfcf _PARAMS((float));
+extern float log2f _PARAMS((float));
 #define log2f(x) (logf (x) / (float) _M_LOG2_E)
 extern float hypotf _PARAMS((float, float));
 #endif /* ! defined (_REENT_ONLY) */
Index: libm/common/Makefile.am
===================================================================
RCS file: /cvs/src/src/newlib/libm/common/Makefile.am,v
retrieving revision 1.9
diff -u -r1.9 Makefile.am
--- libm/common/Makefile.am	17 May 2007 18:50:57 -0000	1.9
+++ libm/common/Makefile.am	18 Mar 2009 01:40:26 -0000
@@ -11,7 +11,7 @@
 	s_rint.c s_logb.c s_matherr.c s_lib_ver.c \
 	s_fdim.c s_fma.c s_fmax.c s_fmin.c s_fpclassify.c s_lrint.c \
 	s_lround.c s_nearbyint.c s_remquo.c s_round.c s_scalbln.c \
-	s_signbit.c s_trunc.c
+	s_signbit.c s_trunc.c s_log2.c
 
 fsrc =	sf_finite.c sf_copysign.c sf_modf.c sf_scalbn.c \
 	sf_cbrt.c sf_exp10.c sf_expm1.c sf_ilogb.c \
@@ -20,7 +20,7 @@
 	sf_rint.c sf_logb.c \
 	sf_fdim.c sf_fma.c sf_fmax.c sf_fmin.c sf_fpclassify.c sf_lrint.c \
 	sf_lround.c sf_nearbyint.c sf_remquo.c sf_round.c \
-	sf_scalbln.c sf_trunc.c
+	sf_scalbln.c sf_trunc.c sf_log2.c
 
 libcommon_la_LDFLAGS = -Xcompiler -nostdlib
 
@@ -94,6 +94,10 @@
 	$(CHEW) < $(srcdir)/s_log1p.c >$@ 2>/dev/null
 	touch stmp-def
 
+slog2.def: s_log2.c
+	$(CHEW) < $(srcdir)/s_log2.c >$@ 2>/dev/null
+	touch stmp-def
+
 smodf.def: s_modf.c
 	$(CHEW) < $(srcdir)/s_modf.c >$@ 2>/dev/null
 	touch stmp-def
Index: libm/common/s_log2.c
===================================================================
RCS file: libm/common/s_log2.c
diff -N libm/common/s_log2.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libm/common/s_log2.c	18 Mar 2009 01:40:26 -0000
@@ -0,0 +1,73 @@
+/* @(#)s_log2.c 5.1 93/09/24 */
+/* Modification from s_exp10.c Yaakov Selkowitz 2009.  */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+FUNCTION
+	<<log2>>, <<log2f>>---base 2 logarithm
+INDEX
+	log2
+INDEX
+	log2f
+
+ANSI_SYNOPSIS
+	#include <math.h>
+	double log2(double <[x]>);
+	float log2f(float <[x]>);
+
+TRAD_SYNOPSIS
+	#include <math.h>
+	double log2(<[x]>);
+	double <[x]>;
+
+	float log2f(<[x]>);
+	float <[x]>;
+
+DESCRIPTION
+	<<log2>> returns the base 2 logarithm of <[x]>.
+
+	<<log2f>> is identical, save that it takes and returns <<float>> values.
+
+RETURNS
+	On success, <<log2>> and <<log2f>> return the calculated value.
+	If the result underflows, the returned value is <<0>>.  If the
+	result overflows, the returned value is <<HUGE_VAL>>.  In
+	either case, <<errno>> is set to <<ERANGE>>.
+
+PORTABILITY
+	<<log2>> and <<log2f>> are required by ISO/IEC 9899:1999 and the
+	System V Interface Definition (Issue 6).
+*/
+
+/*
+ * wrapper log2(x)
+ */
+
+#include "fdlibm.h"
+#include <errno.h>
+#include <math.h>
+#undef log2
+
+#ifndef _DOUBLE_IS_32BITS
+
+#ifdef __STDC__
+	double log2(double x)		/* wrapper log2 */
+#else
+	double log2(x)			/* wrapper log2 */
+	double x;
+#endif
+{
+  return (log(x) / M_LOG2_E);
+}
+
+#endif /* defined(_DOUBLE_IS_32BITS) */
Index: libm/common/sf_log2.c
===================================================================
RCS file: libm/common/sf_log2.c
diff -N libm/common/sf_log2.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libm/common/sf_log2.c	18 Mar 2009 01:40:26 -0000
@@ -0,0 +1,48 @@
+/* sf_log2.c -- float version of s_log2.c.
+ * Modification of sf_exp10.c by Yaakov Selkowitz 2009.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice 
+ * is preserved.
+ * ====================================================
+ */
+
+/* 
+ * wrapper log2f(x)
+ */
+
+#include "fdlibm.h"
+#include <errno.h>
+#include <math.h>
+#undef log2
+#undef log2f
+
+#ifdef __STDC__
+	float log2f(float x)		/* wrapper log2f */
+#else
+	float log2f(x)			/* wrapper log2f */
+	float x;
+#endif
+{
+  return (logf(x) / (float) M_LOG2_E);
+}
+
+#ifdef _DOUBLE_IS_32BITS
+
+#ifdef __STDC__
+	double log2(double x)
+#else
+	double log2(x)
+	double x;
+#endif
+{
+	return (double) log2f((float) x);
+}
+
+#endif /* defined(_DOUBLE_IS_32BITS) */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]