Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Sep 2012 03:12:07 +1000 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Stephen Montgomery-Smith <stephen@missouri.edu>
Cc:        freebsd-numerics@FreeBSD.org
Subject:   Re: Complex arg-trig functions
Message-ID:  <20120917025148.X2943@besplex.bde.org>
In-Reply-To: <5055EE33.2090400@missouri.edu>
References:  <5017111E.6060003@missouri.edu> <20120814201105.T934@besplex.bde.org> <502A780B.2010106@missouri.edu> <20120815223631.N1751@besplex.bde.org> <502C0CF8.8040003@missouri.edu> <20120906221028.O1542@besplex.bde.org> <5048D00B.8010401@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> <5055EE33.2090400@missouri.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 16 Sep 2012, Stephen Montgomery-Smith wrote:

> A style question: do you mind this
>
> if (sy==0) ry = copysign(ry, -1);
> if (A < 1) A = 1;
>
> or do you prefer
>
> if (sy==0)
> 	ry = copysign(ry, -1);
> if (A < 1)
> 	A = 1;

Multiple statements per line are large style bugs, as are missing spaces
around == operators (I might agree only to omitting spaces around most
multiplication operators and some addition operators).

Apart from being less readable, multiple statements per line break debugging
using line-based debuggers.

BTW, copysign() is builtin in gcc-4.2 and not broken by a macro in <math.h>.
Otherwise it would be very slow.

BTW2, fdlibm avoids using copysign() internally, but often sets sign
bits by a direct bit access which does the equivalent of what copysign()
does semantically.  This can be slow, since it best it takes a
read-modify-write of the target with all 3 steps in this non-
parallelizable.  Another not so good way to set sign bits is use an
array with enties +-1 and do `ry *= array[sy];'  Branchy code for
setting or clearing the sign bit may be better then either of these
methods, at least if the branches are predictable.  If the builtin is
very smart, then it will treat the copysign() call as a hint and
select the best alternative, and it can do this more easily than it
can rewrite manually optimized sequences for setting sign bits.  I
think it is not very smart.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120917025148.X2943>