changeset: 69975:565f43f6bed4 user: Victor Stinner date: Mon May 09 12:45:41 2011 +0200 files: Modules/mathmodule.c configure configure.in pyconfig.h.in description: Issue #11888: Use system log2() when available I expect the system libc to use more accurate functions than Python. The GNU libc uses for example FYL2X and FYL2XP1 hardware instructions on Intel FPU. diff -r c6523d6faef4 -r 565f43f6bed4 Modules/mathmodule.c --- a/Modules/mathmodule.c Mon May 09 12:24:09 2011 +0200 +++ b/Modules/mathmodule.c Mon May 09 12:45:41 2011 +0200 @@ -602,6 +602,9 @@ } if (x > 0.0) { +#ifdef HAVE_LOG2 + return log2(x); +#else double m; int e; m = frexp(x, &e); @@ -617,6 +620,7 @@ else { return log(m) / log(2.0) + e; } +#endif } else if (x == 0.0) { errno = EDOM; diff -r c6523d6faef4 -r 565f43f6bed4 configure --- a/configure Mon May 09 12:24:09 2011 +0200 +++ b/configure Mon May 09 12:45:41 2011 +0200 @@ -11864,7 +11864,7 @@ fi done -for ac_func in hypot lgamma log1p round tgamma +for ac_func in hypot lgamma log1p log2 round tgamma do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff -r c6523d6faef4 -r 565f43f6bed4 configure.in --- a/configure.in Mon May 09 12:24:09 2011 +0200 +++ b/configure.in Mon May 09 12:45:41 2011 +0200 @@ -2512,7 +2512,7 @@ futimens futimes \ gai_strerror getgroups getlogin getloadavg getpeername getpgid getpid \ getpriority getresuid getresgid getpwent getspnam getspent getsid getwd \ - initgroups kill killpg lchmod lchown lockf linkat lstat lutimes mbrtowc mkdirat mkfifo \ + initgroups kill killpg lchmod lchown lockf log2 linkat lstat lutimes mbrtowc mkdirat mkfifo \ mkfifoat mknod mknodat mktime mremap nice openat pathconf pause plock poll \ posix_fallocate posix_fadvise pread \ pthread_init pthread_kill putenv pwrite readlink readlinkat readv realpath renameat \ @@ -3368,7 +3368,7 @@ LIBS="$LIBS $LIBM" AC_CHECK_FUNCS([acosh asinh atanh copysign erf erfc expm1 finite gamma]) -AC_CHECK_FUNCS([hypot lgamma log1p round tgamma]) +AC_CHECK_FUNCS([hypot lgamma log1p log2 round tgamma]) AC_CHECK_DECLS([isinf, isnan, isfinite], [], [], [[#include ]]) # On FreeBSD 6.2, it appears that tanh(-0.) returns 0. instead of diff -r c6523d6faef4 -r 565f43f6bed4 pyconfig.h.in --- a/pyconfig.h.in Mon May 09 12:24:09 2011 +0200 +++ b/pyconfig.h.in Mon May 09 12:45:41 2011 +0200 @@ -476,6 +476,9 @@ /* Define to 1 if you have the `log1p' function. */ #undef HAVE_LOG1P +/* Define to 1 if you have the `log2' function. */ +#undef HAVE_LOG2 + /* Define this if you have the type long double. */ #undef HAVE_LONG_DOUBLE