summaryrefslogtreecommitdiffstats
path: root/lib/msun/src/k_log.h
Commit message (Collapse)AuthorAgeFilesLines
* Various changes to improve the accuracy and speed of log{2,10}{,f}.das2011-10-151-27/+11
| | | | | | | | | | | | | | | | | - Rename __kernel_log() to k_log1p(). - Move some of the work that was previously done in the kernel log into the callers. This enables further refactoring to improve accuracy or speed, although I don't recall the details. - Use extra precision when adding the final scaling term, which improves accuracy. - Describe and work around compiler problems that break some of the multiprecision calculations. A fix for a small bug is also included: - Add a special case for log*(1). This is needed to ensure that log*(1) == +0 instead of -0, even when the rounding mode is FE_DOWNWARD. Submitted by: bde
* Add a "kernel" log function, based on e_log.c, which is useful fordas2010-12-051-0/+116
implementing accurate logarithms in different bases. This is based on an approach bde coded up years ago. This function should always be inlined; it will be used in only a few places, and rudimentary tests show a 40% performance improvement in implementations of log2() and log10() on amd64. The kernel takes a reduced argument x and returns the same polynomial approximation as e_log.c, but omitting the low-order term. The low-order term is much larger than the rest of the approximation, so the caller of the kernel function can scale it to the appropriate base in extra precision and obtain a much more accurate answer than by using log(x)/log(b).
OpenPOWER on IntegriCloud