From owner-freebsd-numerics@freebsd.org Fri Mar 8 00:22:50 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 F2261152C634 for ; Fri, 8 Mar 2019 00:22:49 +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 386838222D for ; Fri, 8 Mar 2019 00:22:48 +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 x280Mj1w026366 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Thu, 7 Mar 2019 16:22:45 -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 x280MjNf026365; Thu, 7 Mar 2019 16:22:45 -0800 (PST) (envelope-from sgk) Date: Thu, 7 Mar 2019 16:22:45 -0800 From: Steve Kargl To: Bruce Evans Cc: freebsd-numerics@freebsd.org Subject: Re: Update ENTERI() macro Message-ID: <20190308002245.GA26338@troutmask.apl.washington.edu> Reply-To: sgk@troutmask.apl.washington.edu References: <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> <20190306184829.GA44023@troutmask.apl.washington.edu> <20190307061214.R4911@besplex.bde.org> <20190306214233.GA23159@troutmask.apl.washington.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190306214233.GA23159@troutmask.apl.washington.edu> User-Agent: Mutt/1.11.2 (2019-01-07) X-Rspamd-Queue-Id: 386838222D X-Spamd-Bar: + Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [1.24 / 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.59)[0.594,0]; NEURAL_HAM_LONG(-0.73)[-0.732,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.64)[0.644,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: Fri, 08 Mar 2019 00:22:50 -0000 On Wed, Mar 06, 2019 at 01:42:33PM -0800, Steve Kargl wrote: > On Thu, Mar 07, 2019 at 06:30:42AM +1100, Bruce Evans wrote: > > On Wed, 6 Mar 2019, Steve Kargl wrote: > > > > > On Wed, Mar 06, 2019 at 11:56:23PM +1100, Bruce Evans wrote: > > >> On Tue, 5 Mar 2019, Steve Kargl wrote: > > > > > >>> 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(). > > > > I now see that you implemented 2 more versions of __ldexpl_cexpl() by > > cloning the old double precision version. Apparently the includes > > are to unpolluted for the compiler to see the multiple versions :-). > > > > Using the version in k_expl.h almost forces inlining of expl()'s kernel > > and its large tables, just like for hyperbolic functions. This wastes > > a lot of space, especially for duplicating the tables. It is only a > > small optimization for time. It is done for the hyperbolic functions > > to get this optimization, and for __ldexpl_cexpl() just for convenience. > > The version in k_expl.h has 2 bugs. You note the first (cos instead > of cosl). The second is > > In file included from /data/kargl/trunk/math/libm/msun/ld80/s_cexpl.c:43: > /data/kargl/trunk/math/libm/msun/ld80/k_expl.h:288:22: error: magnitude of > floating-point constant too large for type 'double'; maximum is > 1.7976931348623157E+308 [-Werror,-Wliteral-range] > exp_x = (lo + hi) * 0x1p16382; > ^ Make that 3 bugs. Index: ld80/k_expl.h =================================================================== --- ld80/k_expl.h (revision 344600) +++ ld80/k_expl.h (working copy) @@ -285,7 +285,7 @@ y = cimagl(z); __k_expl(x, &hi, &lo, &k); - exp_x = (lo + hi) * 0x1p16382; + exp_x = (lo + hi) * 0x1p16382L; expt += k - 16382; scale1 = 1; @@ -292,9 +292,9 @@ half_expt = expt / 2; SET_LDBL_EXPSIGN(scale1, BIAS + half_expt); scale2 = 1; - SET_LDBL_EXPSIGN(scale1, BIAS + expt - half_expt); + SET_LDBL_EXPSIGN(scale2, BIAS + expt - half_expt); - return (CMPLXL(cos(y) * exp_x * scale1 * scale2, + return (CMPLXL(cosl(y) * exp_x * scale1 * scale2, sinl(y) * exp_x * scale1 * scale2)); } #endif /* _COMPLEX_H */ -- Steve