This is the mail archive of the
`libc-alpha@sourceware.org`
mailing list for the glibc project.

Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|

Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |

Other format: | [Raw text] |

*From*: Siddhesh Poyarekar <siddhesh at gotplt dot org>*To*: Patrick McGehearty <patrick dot mcgehearty at oracle dot com>, libc-alpha at sourceware dot org*Date*: Mon, 11 Dec 2017 13:44:38 +0530*Subject*: Re: [PATCH] Improves __ieee754_exp() performance by greater than 5x on sparc/x86.*Authentication-results*: sourceware.org; auth=none*References*: <1512774211-43942-1-git-send-email-patrick.mcgehearty@oracle.com>

On Saturday 09 December 2017 04:33 AM, Patrick McGehearty wrote: > +/* IBM exp(x) replaced by following exp(x) in 2017. IBM exp1(x,xx) remains. */ > +/* exp(x) > + Hybrid algorithm of Peter Tang's Table driven method (for large > + arguments) and an accurate table (for small arguments). > + Written by K.C. Ng, November 1988. > + Revised by Patrick McGehearty, Nov 2017 to use j/64 instead of j/32 > + Method (large arguments): > + 1. Argument Reduction: given the input x, find r and integer k > + and j such that > + x = (k+j/64)*(ln2) + r, |r| <= (1/128)*ln2 > + > + 2. exp(x) = 2^k * (2^(j/64) + 2^(j/64)*expm1(r)) > + a. expm1(r) is approximated by a polynomial: > + expm1(r) ~ r + t1*r^2 + t2*r^3 + ... + t5*r^6 > + Here t1 = 1/2 exactly. > + b. 2^(j/64) is represented to twice double precision > + as TBL[2j]+TBL[2j+1]. > + > + Note: If divide were fast enough, we could use another approximation > + in 2.a: > + expm1(r) ~ (2r)/(2-R), R = r - r^2*(t1 + t2*r^2) > + (for the same t1 and t2 as above) > + > + Special cases: > + exp(INF) is INF, exp(NaN) is NaN; > + exp(-INF)= 0; > + for finite argument, only exp(0)=1 is exact. > + > + Accuracy: > + According to an error analysis, the error is always less than > + an ulp (unit in the last place). The largest errors observed > + are less than 0.55 ulp for normal results and less than 0.75 ulp > + for subnormal results. > + > + Misc. info. > + For IEEE double > + if x > 7.09782712893383973096e+02 then exp(x) overflow > + if x < -7.45133219101941108420e+02 then exp(x) underflow. */ > + Are you planning to work on the log implementation as well? Siddhesh

**Follow-Ups**:**Re: [PATCH] Improves __ieee754_exp() performance by greater than 5x on sparc/x86.***From:*Patrick McGehearty

**References**:**[PATCH] Improves __ieee754_exp() performance by greater than 5x on sparc/x86.***From:*Patrick McGehearty

Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|

Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |