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

Reply via email to