From b21a641d4c63fce45736b635314e079ae360e5b2 Mon Sep 17 00:00:00 2001 From: dana Date: Sun, 12 Aug 2018 03:20:37 -0500 Subject: 43275: Add log2 to match func --- ChangeLog | 5 +++++ Doc/Zsh/mod_mathfunc.yo | 6 +++--- Src/Modules/mathfunc.c | 10 ++++++++++ Test/V03mathfunc.ztst | 6 ++++++ configure.ac | 1 + 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 110f8636d..c5ffd0b7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2018-08-13 Peter Stephenson + + * dana: 43275: Doc/Zsh/mod_mathfunc.yo, Src/Modules/mathfunc.c, + Test/V03mathfunc.ztst, configure.ac: Add log2 to mathfunc. + 2018-08-12 Marc Cornellà * unposted (PR #26): Completion/Unix/Command/_git: __git_files: diff --git a/Doc/Zsh/mod_mathfunc.yo b/Doc/Zsh/mod_mathfunc.yo index 8b72de3ab..428a5be47 100644 --- a/Doc/Zsh/mod_mathfunc.yo +++ b/Doc/Zsh/mod_mathfunc.yo @@ -24,9 +24,9 @@ The following functions take a single floating point argument: tt(acos), tt(acosh), tt(asin), tt(asinh), tt(atan), tt(atanh), tt(cbrt), tt(ceil), tt(cos), tt(cosh), tt(erf), tt(erfc), tt(exp), tt(expm1), tt(fabs), tt(floor), tt(gamma), tt(j0), tt(j1), tt(lgamma), tt(log), tt(log10), -tt(log1p), tt(logb), tt(sin), tt(sinh), tt(sqrt), tt(tan), tt(tanh), -tt(y0), tt(y1). The tt(atan) function can optionally take a second -argument, in which case it behaves like the C function tt(atan2). +tt(log1p), tt(log2), tt(logb), tt(sin), tt(sinh), tt(sqrt), tt(tan), +tt(tanh), tt(y0), tt(y1). The tt(atan) function can optionally take a +second argument, in which case it behaves like the C function tt(atan2). The tt(ilogb) function takes a single floating point argument, but returns an integer. diff --git a/Src/Modules/mathfunc.c b/Src/Modules/mathfunc.c index d1c3e089a..fc2593dca 100644 --- a/Src/Modules/mathfunc.c +++ b/Src/Modules/mathfunc.c @@ -65,6 +65,7 @@ MF_LGAMMA, MF_LOG, MF_LOG10, MF_LOG1P, +MF_LOG2, MF_LOGB, MF_NEXTAFTER, MF_RINT, @@ -142,6 +143,7 @@ static struct mathfunc mftab[] = { NUMMATHFUNC("log", math_func, 1, 1, MF_LOG), NUMMATHFUNC("log10", math_func, 1, 1, MF_LOG10), NUMMATHFUNC("log1p", math_func, 1, 1, MF_LOG1P), + NUMMATHFUNC("log2", math_func, 1, 1, MF_LOG2), NUMMATHFUNC("logb", math_func, 1, 1, MF_LOGB), NUMMATHFUNC("nextafter", math_func, 2, 2, MF_NEXTAFTER), #ifdef HAVE_ERAND48 @@ -338,6 +340,14 @@ math_func(UNUSED(char *name), int argc, mnumber *argv, int id) retd = log1p(argd); break; + case MF_LOG2: +#ifdef HAVE_LOG2 + retd = log2(argd); +#else + retd = log(argd) / log(2); +#endif + break; + case MF_LOGB: retd = logb(argd); break; diff --git a/Test/V03mathfunc.ztst b/Test/V03mathfunc.ztst index d6b4e0987..9a297d69d 100644 --- a/Test/V03mathfunc.ztst +++ b/Test/V03mathfunc.ztst @@ -139,3 +139,9 @@ F:This test fails if your math library doesn't have erand48(). print $g, $l 0:Test Gamma function gamma and lgamma >1.00000, 0.00000 + + float -F 5 a b c + (( a = log2(0.5), b = log2(1.5), c = log2(99) )) + print -r - "$a, $b, $c" +0:log2 +>-1.00000, 0.58496, 6.62936 diff --git a/configure.ac b/configure.ac index 53c30c2cf..5e13c0f11 100644 --- a/configure.ac +++ b/configure.ac @@ -1266,6 +1266,7 @@ AC_CHECK_FUNCS(strftime strptime mktime timelocal \ isblank iswblank \ uname \ signgam tgamma \ + log2 \ scalbn \ putenv getenv setenv unsetenv xw\ brk sbrk \ -- cgit 1.4.1