Thank you, Paul. It looks like it would be worth a try as the current log2 implementation from Cygwin is clearly not optimal for either speed or accuracy. This may be a stupid question, but what would be the easiest way to incorporate this into open source software? Should I rename the function and copy the (slightly modified) source code into the distribution?
Best Regards, Kennon > On 01/19/2026 12:53 AM PST Paul Zimmermann via Cygwin <[email protected]> > wrote: > > > Hi, > > > With default settings the worst case error in nearest rounding mode is > > 0.547 ULP > > with inlined fma and fma contraction. > > It uses a 1 KB lookup table, > > ... > > Note that the math.h header defines log2(x) to be log(x)/Ln2, this is > > not changed, so the new code is only used if that macro is suppressed." > > > > Paul Zimmerman regularly posts library math function comparisons on the > > newlib > > and comparable library mailing lists, available at: > > > > https://members.loria.fr/PZimmermann/papers/accuracy.pdf > > > > that should give you an idea of the current state of the functions, if he > > is > > even aware of the issue. > > indeed, the known worst case error for Newlib log2 is 2.06 ulp: > > log2 0 -1 0x1.68d778f076021p+0 [2] [2.06] 2.05526 2.055255219183752 > libm gives 0x1.fb1b88680e7adp-2 > mpfr gives 0x1.fb1b88680e7abp-2 > > The 0.547 value above could match the GNU libc worst error: > > log2 0 -1 0x1.1406d79e1b574p+0 [1] [0.548] 0.547538 0.5475371438132311 > libm gives 0x1.bd16a11d3404ep-4 > mpfr gives 0x1.bd16a11d3404fp-4 > > If your goal is accuracy, you can try the CORE-MATH implementation: > > https://gitlab.inria.fr/core-math/core-math/-/blob/master/src/binary64/log2/log2.c > > It takes 19 cycles on average on an Intel(R) Core(TM) i7-8700, and is > correctly rounded (for any rounding mode). > > Paul > > > > -- > Problem reports: https://cygwin.com/problems.html > FAQ: https://cygwin.com/faq/ > Documentation: https://cygwin.com/docs.html > Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple

