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.
This commit is contained in:
parent
936d518dc8
commit
8f9f8d612a
|
@ -602,6 +602,9 @@ m_log2(double x)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (x > 0.0) {
|
if (x > 0.0) {
|
||||||
|
#ifdef HAVE_LOG2
|
||||||
|
return log2(x);
|
||||||
|
#else
|
||||||
double m;
|
double m;
|
||||||
int e;
|
int e;
|
||||||
m = frexp(x, &e);
|
m = frexp(x, &e);
|
||||||
|
@ -617,6 +620,7 @@ m_log2(double x)
|
||||||
else {
|
else {
|
||||||
return log(m) / log(2.0) + e;
|
return log(m) / log(2.0) + e;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if (x == 0.0) {
|
else if (x == 0.0) {
|
||||||
errno = EDOM;
|
errno = EDOM;
|
||||||
|
|
|
@ -11864,7 +11864,7 @@ _ACEOF
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
for ac_func in hypot lgamma log1p round tgamma
|
for ac_func in hypot lgamma log1p log2 round tgamma
|
||||||
do :
|
do :
|
||||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
||||||
|
|
|
@ -2512,7 +2512,7 @@ AC_CHECK_FUNCS(alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
|
||||||
futimens futimes \
|
futimens futimes \
|
||||||
gai_strerror getgroups getlogin getloadavg getpeername getpgid getpid \
|
gai_strerror getgroups getlogin getloadavg getpeername getpgid getpid \
|
||||||
getpriority getresuid getresgid getpwent getspnam getspent getsid getwd \
|
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 \
|
mkfifoat mknod mknodat mktime mremap nice openat pathconf pause plock poll \
|
||||||
posix_fallocate posix_fadvise pread \
|
posix_fallocate posix_fadvise pread \
|
||||||
pthread_init pthread_kill putenv pwrite readlink readlinkat readv realpath renameat \
|
pthread_init pthread_kill putenv pwrite readlink readlinkat readv realpath renameat \
|
||||||
|
@ -3368,7 +3368,7 @@ LIBS_SAVE=$LIBS
|
||||||
LIBS="$LIBS $LIBM"
|
LIBS="$LIBS $LIBM"
|
||||||
|
|
||||||
AC_CHECK_FUNCS([acosh asinh atanh copysign erf erfc expm1 finite gamma])
|
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 <math.h>]])
|
AC_CHECK_DECLS([isinf, isnan, isfinite], [], [], [[#include <math.h>]])
|
||||||
|
|
||||||
# On FreeBSD 6.2, it appears that tanh(-0.) returns 0. instead of
|
# On FreeBSD 6.2, it appears that tanh(-0.) returns 0. instead of
|
||||||
|
|
|
@ -476,6 +476,9 @@
|
||||||
/* Define to 1 if you have the `log1p' function. */
|
/* Define to 1 if you have the `log1p' function. */
|
||||||
#undef HAVE_LOG1P
|
#undef HAVE_LOG1P
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `log2' function. */
|
||||||
|
#undef HAVE_LOG2
|
||||||
|
|
||||||
/* Define this if you have the type long double. */
|
/* Define this if you have the type long double. */
|
||||||
#undef HAVE_LONG_DOUBLE
|
#undef HAVE_LONG_DOUBLE
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue