From owner-freebsd-numerics@FreeBSD.ORG Thu Aug 16 04:12:44 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 D4D97106566C for ; Thu, 16 Aug 2012 04:12:44 +0000 (UTC) (envelope-from stephen@missouri.edu) Received: from wilberforce.math.missouri.edu (wilberforce.math.missouri.edu [128.206.184.213]) by mx1.freebsd.org (Postfix) with ESMTP id 917ED8FC08 for ; Thu, 16 Aug 2012 04:12:44 +0000 (UTC) Received: from [127.0.0.1] (wilberforce.math.missouri.edu [128.206.184.213]) by wilberforce.math.missouri.edu (8.14.5/8.14.5) with ESMTP id q7G4CgxD005104 for ; Wed, 15 Aug 2012 23:12:43 -0500 (CDT) (envelope-from stephen@missouri.edu) Message-ID: <502C733B.1080306@missouri.edu> Date: Wed, 15 Aug 2012 23:12:43 -0500 From: Stephen Montgomery-Smith User-Agent: Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20120714 Thunderbird/14.0 MIME-Version: 1.0 To: freebsd-numerics@freebsd.org References: <5017111E.6060003@missouri.edu> <501C361D.4010807@missouri.edu> <20120804165555.X1231@besplex.bde.org> <501D51D7.1020101@missouri.edu> <20120805030609.R3101@besplex.bde.org> <501D9C36.2040207@missouri.edu> <20120805175106.X3574@besplex.bde.org> <501EC015.3000808@missouri.edu> <20120805191954.GA50379@troutmask.apl.washington.edu> <20120807205725.GA10572@server.rulingia.com> <20120809025220.N4114@besplex.bde.org> <5027F07E.9060409@missouri.edu> <20120814003614.H3692@besplex.bde.org> <50295F5C.6010800@missouri.edu> <20120814072946.S5260@besplex.bde.org> <50297CA5.5010900@missouri.edu> <50297E43.7090309@missouri.edu> <20120814201105.T934@besplex.bde.org> <502A780B.2010106@missouri.edu> <20120815223631.N1751@besplex.bde.org> <502C0CF8.8040003@missouri.edu> In-Reply-To: <502C0CF8.8040003@missouri.edu> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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: Thu, 16 Aug 2012 04:12:44 -0000 On 08/15/2012 03:56 PM, Stephen Montgomery-Smith wrote: > On 08/15/2012 08:35 AM, Bruce Evans wrote: >> On Tue, 14 Aug 2012, Stephen Montgomery-Smith wrote: >> I added this to the NaN mixing in catan[h]*(), >> and now all my tests pass: >> >> % diff -c2 catrig.c~ catrig.c >> % *** catrig.c~ Sun Aug 12 17:29:18 2012 >> % --- catrig.c Wed Aug 15 11:57:02 2012 >> % *************** >> % *** 605,609 **** >> % */ >> % if (ISNAN(x) || ISNAN(y)) >> % ! return (cpack(x+y, x+y)); >> % % /* (x,inf) and (inf,y) and (inf,inf) -> (0,PI/2) */ >> % --- 609,613 ---- >> % */ >> % if (ISNAN(x) || ISNAN(y)) >> % ! return (cpack((x+0.0L)+(y+0), (x+0.0L)+(y+0))); >> % % /* (x,inf) and (inf,y) and (inf,inf) -> (0,PI/2) */ >> >> Use this expression in all precisions. > > > Would this work? > > if (ISNAN(x) || ISNAN(y)) > return (cpack((x+x)+(y+y), (x+x)+(y+y))); > I know Bruce is gone for a couple of weeks, but can someone else answer these questions? I decided to start reading a bit about nans: http://en.wikipedia.org/wiki/NaN I don't understand why my original code: if (ISNAN(x) || ISNAN(y)) return (cpack(x+y, x+y)); doesn't return quiet nans, and generally do everything else it should do (like raise invalid if one or both are signaling nans). This is what I read on the web page: "Signaling NaNs, or sNaNs, are special forms of a NaN that when consumed by most operations should raise an invalid exception and then, if appropriate, be "quieted" into a qNaN that may then propagate." This is Bruce's code: return (cpack((x+0.0L)+(y+0), (x+0.0L)+(y+0))) and he says he does this for all precisions. Why does he add 0.0L to x, but only add 0 to y?