From owner-freebsd-numerics@FreeBSD.ORG Tue Sep 18 06:41:57 2012 Return-Path: Delivered-To: freebsd-numerics@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 85CA6106566B for ; Tue, 18 Sep 2012 06:41:57 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail13.syd.optusnet.com.au (mail13.syd.optusnet.com.au [211.29.132.194]) by mx1.freebsd.org (Postfix) with ESMTP id 128AC8FC12 for ; Tue, 18 Sep 2012 06:41:56 +0000 (UTC) Received: from c122-106-157-84.carlnfd1.nsw.optusnet.com.au (c122-106-157-84.carlnfd1.nsw.optusnet.com.au [122.106.157.84]) by mail13.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id q8I6frVm020384 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 18 Sep 2012 16:41:54 +1000 Date: Tue, 18 Sep 2012 16:41:53 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Stephen Montgomery-Smith In-Reply-To: <5057F24B.7020605@missouri.edu> Message-ID: <20120918162105.U991@besplex.bde.org> References: <5017111E.6060003@missouri.edu> <504D3CCD.2050006@missouri.edu> <504FF726.9060001@missouri.edu> <20120912191556.F1078@besplex.bde.org> <20120912225847.J1771@besplex.bde.org> <50511B40.3070009@missouri.edu> <20120913204808.T1964@besplex.bde.org> <5051F59C.6000603@missouri.edu> <20120914014208.I2862@besplex.bde.org> <50526050.2070303@missouri.edu> <20120914212403.H1983@besplex.bde.org> <50538E28.6050400@missouri.edu> <20120915231032.C2669@besplex.bde.org> <50548E15.3010405@missouri.edu> <5054C027.2040008@missouri.edu> <5054C200.7090307@missouri.edu> <20120916041132.D6344@besplex.bde.org> <50553424.2080902@missouri.edu> <20120916134730.Y957@besplex.bde.org> <5055ECA8.2080008@missouri.edu> <20120917022614.R2943@besplex.bde.org> <50562213.9020400@missouri.edu> <20120917060116.G3825@besplex.bde.org> <50563C57.60806@missouri.edu> <20120918012459.V5094@besplex.bde.org> <5057A932.3000603@missouri.edu> <5057F24B.7020605@missouri.edu> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-numerics@freebsd.org Subject: Re: Complex arg-trig functions X-BeenThere: freebsd-numerics@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 18 Sep 2012 06:41:57 -0000 On Mon, 17 Sep 2012, Stephen Montgomery-Smith wrote: > On 09/17/2012 05:50 PM, Stephen Montgomery-Smith wrote: > >>> cacos*() and casin*() should benefit even more from an up-front raising >>> of inexact, since do_hard_work() has 7 magic statements to raise inexact >>> where sum_squares has only 1. >> >> Where is the code that raises inexact up-front? > > I don't see why having code upfront will make it much more efficient. Out of > these 7 magic statements, at most two of them will be called. 7 instead of 1 is more complex, and uses more branch prediction resources. > But I could put something like > > if ((x == 0 && y == 0) || (x == 0 && y == 1) || (int)(1+tiny) == 1) { > ........ > at the beginning of do_hard_work and catanh. I put without (x == 0 && y == 1) in catanh(). (x == 0 && y == 1) in it is a bug, since catanh(I) = I*Pi/2 with inexact. However, I seemed to have missed (x == 1 && y == 0) -> catanh(1) = +Inf without inexact. do_hard_work() is too late for this, since the following earlier cases also need it: - large x or y (neither infinite) - small x and y (not both 0, except for acosh(0) = Pi/2 with inexact, etc.) (the lost optimization). > OK, I think I made changes more or less according to your suggestions. > > In the case A < A_crossover, a threshold like DBL_EPSILON*DBL_EPSILON/128 is > required. I think the one you set is too large. It is important that > sqrt(x) + x/2 is sqrt(x). (Again I don't think your tests would pick this > up, because you need to do a lot of tests where y is close to or equal to 1.) Well, there were 2**12 of them with y = 1+denormal, with 7 different denormals, but none with y = 1. Will test some more. (I'm testing denormals with a few 1's in their lower bits since experience shows that values with 0's in their lower bits are too special. For example, ax*ax is exact if enough lower bits in ax are 0.) Bruce