From owner-freebsd-numerics@freebsd.org Wed Mar 6 18:48:35 2019 Return-Path: Delivered-To: freebsd-numerics@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3FAF01523F76 for ; Wed, 6 Mar 2019 18:48:35 +0000 (UTC) (envelope-from sgk@troutmask.apl.washington.edu) Received: from troutmask.apl.washington.edu (troutmask.apl.washington.edu [128.95.76.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "troutmask", Issuer "troutmask" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 983B66B9EC for ; Wed, 6 Mar 2019 18:48:32 +0000 (UTC) (envelope-from sgk@troutmask.apl.washington.edu) Received: from troutmask.apl.washington.edu (localhost [127.0.0.1]) by troutmask.apl.washington.edu (8.15.2/8.15.2) with ESMTPS id x26ImTXm045033 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Wed, 6 Mar 2019 10:48:29 -0800 (PST) (envelope-from sgk@troutmask.apl.washington.edu) Received: (from sgk@localhost) by troutmask.apl.washington.edu (8.15.2/8.15.2/Submit) id x26ImTZH045032; Wed, 6 Mar 2019 10:48:29 -0800 (PST) (envelope-from sgk) Date: Wed, 6 Mar 2019 10:48:29 -0800 From: Steve Kargl To: Bruce Evans Cc: freebsd-numerics@freebsd.org Subject: Re: Update ENTERI() macro Message-ID: <20190306184829.GA44023@troutmask.apl.washington.edu> Reply-To: sgk@troutmask.apl.washington.edu References: <20190226191825.GA68479@troutmask.apl.washington.edu> <20190227145002.P907@besplex.bde.org> <20190227074811.GA75972@troutmask.apl.washington.edu> <20190227201214.V1823@besplex.bde.org> <20190227161906.GA77785@troutmask.apl.washington.edu> <20190228060920.R4413@besplex.bde.org> <20190304212159.GA12587@troutmask.apl.washington.edu> <20190305153243.Y1349@besplex.bde.org> <20190306055201.GA40298@troutmask.apl.washington.edu> <20190306225811.P2731@besplex.bde.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190306225811.P2731@besplex.bde.org> User-Agent: Mutt/1.11.2 (2019-01-07) X-Rspamd-Queue-Id: 983B66B9EC X-Spamd-Bar: + Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [1.17 / 15.00]; ARC_NA(0.00)[]; HAS_REPLYTO(0.00)[sgk@troutmask.apl.washington.edu]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; NEURAL_SPAM_SHORT(0.90)[0.899,0]; NEURAL_HAM_LONG(-0.61)[-0.611,0]; MIME_GOOD(-0.10)[text/plain]; RCVD_TLS_LAST(0.00)[]; DMARC_NA(0.00)[washington.edu]; AUTH_NA(1.00)[]; REPLYTO_ADDR_EQ_FROM(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_IN_DNSWL_MED(-0.20)[21.76.95.128.list.dnswl.org : 127.0.11.2]; MX_GOOD(-0.01)[cached: troutmask.apl.washington.edu]; RCPT_COUNT_TWO(0.00)[2]; NEURAL_SPAM_MEDIUM(0.14)[0.144,0]; R_SPF_NA(0.00)[]; FREEMAIL_TO(0.00)[optusnet.com.au]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:73, ipnet:128.95.0.0/16, country:US]; MID_RHS_MATCH_FROM(0.00)[]; IP_SCORE(0.05)[ip: (0.10), ipnet: 128.95.0.0/16(0.15), asn: 73(0.05), country: US(-0.07)] X-BeenThere: freebsd-numerics@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Discussions of high quality implementation of libm functions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Mar 2019 18:48:35 -0000 On Wed, Mar 06, 2019 at 11:56:23PM +1100, Bruce Evans wrote: > On Tue, 5 Mar 2019, Steve Kargl wrote: > > > ... > > I think I have the s_cexpl.c file fixed to use LDBL_EXTRACT_WORDS > > instead of the new macro I introduced. I however cannot figure > > out what David Das did to arrive at k_exp.c, so I cannot write > > Davvid A S. Whoops, again. Seems I conflated real name and login name. > > a similar k_cexpl.c. Yes, I added the 'c' in the name to avoid > > confusion in ld80/. In particular, I have no idea how he found > > his scaling value 'k'. Any insights? > > bde already wrote __ldexp_cexpl() in ld*/k_expl.h, and kargl committed > it in r260066. Does it not work? :-). > > Well, it hasn't been tested, and it indeed cannot work since it spells > cosl(y) as cos(y). Taking long breaks from pecking at libm issues seems to be conducive to memory loss. I'll go review k_expl.h. I simply remember it as having a kernel for expl(). > It is written in a more portable way than the double and float versions > using '1' instead of bit fiddling to start the construction of 2**k. > This makes it identical in ld80 and ld128 (since the exponent range > is the same and the accessor macros hide enough details of the bit > fiddling for the exponent). The duplication is noted in a comment, > but the comment also says that using scalbnl() ond ld128 is probably > best after all (it is slow, but multiplication is also slow). > > I have rewritten the double and float versions in work related to > fixing the accuracy of the double and float versions of hyperbolic > functions. I fixed these before writing the long double hyperbolic > functions using identical methods. You committed the latter, but > the double and float versions still use the old innaccurate slower > methods. > > The rewrite improves the comments, and it is the improved comments > that the reference to k_exp.c in k_expl.h is supposed to be for. > > XX Index: k_exp.c Any chance you'll get around to committing your WIP? Yes, I know you have a few thousand kernel patches in your queue above libm patches. :-) BTW, for the non-exceptional cases with 1M random z values where z=x+Iy and -11350 < x,y < 11350 and I only consider results that are normal, I find my cexpl() yields % ./testl -u -X 11350 Max ULP Re: 1.980535 z = (1.22918109220546510585e+03,1.03853909865862542237e+04) libm = (5.06780736805320166327e+533,-4.39418989082799451477e+533) mpfr = (5.06780736805320166270e+533,-4.39418989082799451456e+533) Max ULP Im: 2.022155 z = (4.83490728165160559637e+03,1.07778990242305355345e+04) libm = (-3.66535128319537945953e+2099,4.67021177841072936494e+2099) mpfr = (-3.66535128319537945915e+2099,4.67021177841072936441e+2099) For comparison, cexp() with -705 < x,y < 705 yields % ./testd -u -X 705 Max ULP Re: 2.215132 z = (1.49377521822925502e+02,1.79997882645095970e+01) libm = (4.93720465697268180e+64,-5.61754869856313932e+64) mpfr = (4.93720465697268310e+64,-5.61754869856313987e+64) Max ULP Im: 2.182779 z = (2.50664219501672335e+02,-4.81327697040560906e+02) libm = (-5.73256778461974670e+108,4.48612518733245315e+108) mpfr = (-5.73256778461974754e+108,4.48612518733245429e+108) Certainly, not exhaustive but encouraging. -- Steve