Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Dec 2012 07:30:47 -0600
From:      Stephen Montgomery-Smith <stephen@missouri.edu>
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        freebsd-numerics@freebsd.org
Subject:   Re: complex arc-trig etc
Message-ID:  <50CF1E87.7030803@missouri.edu>
In-Reply-To: <20121217191324.T1277@besplex.bde.org>
References:  <50CE9D0C.8080901@missouri.edu> <20121217191324.T1277@besplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 12/17/2012 02:38 AM, Bruce Evans wrote:
> On Sun, 16 Dec 2012, Stephen Montgomery-Smith wrote:
> 
>> Hey guys, my complex arc-trig functions at
>> http://people.freebsd.org/~stephen/ have been sitting there a long time.
>> Anyone want to commit them?
> 
> I was sort of waiting for the next rounds of changes:
> 
> 1. update the template to give similar code for float and long double
> 2. make it work for i386 using ENTERI()
> 3. test (2)
> 4. fix some style bugs.  It would be easy for me to run it through
>    indent(1) and get large diffs, but I want you to do it.
> 5. decide what to do for atanhl().  I would prefer a version that is a
>    direct translation of e_atanh.c including style bugs and the filename
>    prefix but not the comment, unless you change the algorithm.
> 6. decide what to do with the template and/or the generation from it
>    that strips comments.
> 
> I haven't done (2), (3) or (6) for clog*() either.  For (6), instead of
> a template and stripped comments, I have all the functions in the same
> file and all comments duplicated, and have to split the file manually
> to compare the functions.
> 
> I only have these local patches.  They correspond to (1) and (5).  Also,
> keep up with the API change in LD80C().
> 
> % --- /home/stephen/public_html/catrigf.c    2012-09-22
> 21:13:50.000000000 +0000
> % +++ catrigf.c    2012-09-22 21:35:51.287614000 +0000
> % @@ -353,12 +353,7 @@
> %      }
> % % -    if (ax == 1 && ay < FLT_EPSILON) {
> % -#if 0
> % -        if (ay > 2*FLT_MIN)
> % -            rx = - logf(ay/2) / 2;
> % -        else
> % -#endif
> % -            rx = - (logf(ay) - m_ln2) / 2;
> % -    } else
> % +    if (ax == 1 && ay < FLT_EPSILON)
> % +        rx = - (logf(ay) - m_ln2) / 2;
> % +    else
> %          rx = log1pf(4*ax / sum_squares(ax-1, ay)) / 4;
> % % --- /home/stephen/public_html/catrigl.c    2012-09-22
> 21:14:24.000000000 +0000
> % +++ catrigl.c    2012-09-28 19:39:47.799585000 +0000
> % @@ -60,6 +60,6 @@
> %  #if LDBL_MANT_DIG == 64
> %  static const union IEEEl2bits
> % -um_e =        LD80C(0xadf85458a2bb4a9b,  1, 0,
> 2.71828182845904523536e0L),
> % -um_ln2 =    LD80C(0xb17217f7d1cf79ac, -1, 0,
> 6.93147180559945309417e-1L);
> % +um_e =        LD80C(0xadf85458a2bb4a9b,  1, 2.71828182845904523536e+0L),
> % +um_ln2 =    LD80C(0xb17217f7d1cf79ac, -1, 6.93147180559945309417e-1L);
> %  #define        m_e    um_e.e
> %  #define        m_ln2    um_ln2.e
> % @@ -348,5 +348,5 @@
> % %      if (y == 0 && ax <= 1)
> % -        return (cpackl(atanhl(x), y));     /* XXX need atanhl() */
> % +        return (cpackl(atanh(x), y));     /* XXX need atanhl() */
> % %      if (x == 0)
> % @@ -369,12 +369,7 @@
> %      }
> % % -    if (ax == 1 && ay < LDBL_EPSILON) {
> % -#if 0
> % -        if (ay > 2*LDBL_MIN)
> % -            rx = - logl(ay/2) / 2;
> % -        else
> % -#endif
> % -            rx = - (logl(ay) - m_ln2) / 2;
> % -    } else
> % +    if (ax == 1 && ay < LDBL_EPSILON)
> % +        rx = - (logl(ay) - m_ln2) / 2;
> % +    else
> %          rx = log1pl(4*ax / sum_squares(ax-1, ay)) / 4;
> %
> 
> You also need log*l() be committed before catrigl() can work.
> 
> Bruce
> 
> 


OK, I didn't realize it needed this much work (which I admit isn't that
much but...).  So maybe I'll sit on these things for a while.  I am not
swamped like Steve is.  But I do have other projects that should take
priority for now.

Thanks, Stephen




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