From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10216 invoked by alias); 12 Aug 2018 08:20:47 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 43275 Received: (qmail 7647 invoked by uid 1010); 12 Aug 2018 08:20:47 -0000 X-Qmail-Scanner-Diagnostics: from mail-it0-f51.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(209.85.214.51):SA:0(-1.9/5.0):. Processed in 5.105993 secs); 12 Aug 2018 08:20:47 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_PASS,T_DKIMWL_WL_MED,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: dana@dana.is X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dana-is.20150623.gappssmtp.com; s=20150623; h=from:content-transfer-encoding:mime-version:subject:message-id:date :to; bh=8BZcIIC2kE3EhT32rL4rC2RQODtALJRZ8C4Ncnn2/1s=; b=CcGJWT8CiKj1295Vo2ZlvdfysprctKhdLICC5MHf0kjO6rV13t0Nsrw84lIEHrliFq g5rnQ7wxkF9Y1KJVC19opCJDi73Wd438BuDOrOgRSc3XGR8ara+RxbppBMHmSmqTatss OJovl6daeDQpYoy/GKmSd9FQT0iDMVllLYrQdo86rDgxhnExZGCt/xrcNQfOX+a7LM0j sqLPPlsJCE41nP3NFbPDP2kbF61w5ccLZ+1+FOeKHn5Qqd3WdTNZOkdwltLj88t0eW2B AlCdwsTLN2XdvI3T4XQxG2q4zBft5In5L2uBai0FlkzhQi3xO1iUyEtX85Z5Ik5opN41 n5Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:content-transfer-encoding:mime-version :subject:message-id:date:to; bh=8BZcIIC2kE3EhT32rL4rC2RQODtALJRZ8C4Ncnn2/1s=; b=QyHn587eN199DxZFLdagOB/5ST1mCu1M4273fCc+oN4ZkIu2wpFlLb9gQMrbqxAWdx duFvh0oaWiJ/1fDQX4oyRNm60AlTmDPROKMTFHyaGZFptJn2Kl505bBSVRdn06RqQLNS hx66E2N+z3KI04YB0tdC+LZK2pR9awYYKCDTEK2FvAeAG2SwFmYmlxb6FJpQqdNbJvhQ 1KGTpFixFCH+SSFAKJPT52x+9R1UUGWxxHdn2UeS+R2LpLTCipAFPff2iIv1KdBaAKNL +F1IE6883hVo6mSAHkVJTMINO+0DSo5np1j5HFGN+PhYwgGb+ch/F9f2XLe87/MydS4a EH4A== X-Gm-Message-State: AOUpUlGEpTZ5476IkwxHrdkIQ9wivw4sOBf9yzPq9CMwBtWhjxrTtK6y 2/AXE93ATAAFVVLYE3kf+JPIUQV0sBg= X-Google-Smtp-Source: AA+uWPxBR0cBxwJQR1GPh0m/3IneGS65IjPzbPhpvHO86ZErte8JV74gMoCbS+2Cetp2PL5OSzJzvA== X-Received: by 2002:a02:90cf:: with SMTP id c15-v6mr11789521jag.130.1534062038533; Sun, 12 Aug 2018 01:20:38 -0700 (PDT) From: dana Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 11.4 \(3445.8.2\)) Subject: [PATCH] zsh/mathfunc: Add log2() Message-Id: <647A3A10-A3AA-4E02-98AC-38385B34D35A@dana.is> Date: Sun, 12 Aug 2018 03:20:37 -0500 To: Zsh hackers list X-Mailer: Apple Mail (2.3445.8.2) Someone on IRC today was absolutely incensed that zsh/mathfunc doesn't = provide a log2(). I assume that's just because it's trivial to do it in 'user = land'. But it's also trivial to do it here, so.... I added an #ifdef like in workers/39064, since i read on-line that there = were still libraries missing the C99 function fairly recently. And since i = added an #ifdef i also added a test. dana 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. =20 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[] =3D { 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 =3D log1p(argd); break; =20 + case MF_LOG2: +#ifdef HAVE_LOG2 + retd =3D log2(argd); +#else + retd =3D log(argd) / log(2); +#endif + break; + case MF_LOGB: retd =3D logb(argd);=20 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 =3D log2(0.5), b =3D log2(1.5), c =3D 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 \