Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 12 Aug 2012 23:09:20 -0000
From:      Bruce Evans <brde@optusnet.com.au>
To:        Stephen Montgomery-Smith <stephen@missouri.edu>
Cc:        Diane Bruce <db@db.net>, Steve Kargl <sgk@troutmask.apl.washington.edu>, John Baldwin <jhb@freebsd.org>, David Chisnall <theraven@freebsd.org>, Bruce Evans <bde@freebsd.org>, Bruce Evans <brde@optusnet.com.au>, David Schultz <das@freebsd.org>, Peter Jeremy <peter@rulingia.com>, Warner Losh <imp@bsdimp.com>
Subject:   Re: Use of C99 extra long double math functions after r236148
Message-ID:  <20120719205347.T2601@besplex.bde.org>
Resent-Message-ID: <20120812230913.GL20453@server.rulingia.com>
In-Reply-To: <5007AD41.9070000@missouri.edu>
References:  <20120714120432.GA70706@server.rulingia.com> <20120717084457.U3890@besplex.bde.org> <5004A5C7.1040405@missouri.edu> <5004DEA9.1050001@missouri.edu> <20120717200931.U6624@besplex.bde.org> <5006D13D.2080702@missouri.edu> <20120718205625.GA409@troutmask.apl.washington.edu> <500725F2.7060603@missouri.edu> <20120719025345.GA1376@troutmask.apl.washington.edu> <50077987.1080307@missouri.edu> <20120719032706.GA1558@troutmask.apl.washington.edu> <5007826D.7060806@missouri.edu> <5007AD41.9070000@missouri.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 19 Jul 2012, Stephen Montgomery-Smith wrote:

> I did a ULP test on clog.  The test code is attached.  (Not the cleanest 
> code, I know, but it does the job.)  It needs the mpfr and unuran ports 
> installed.
>
> To my shock, I found that under certain circumstances, the ULP in the real 
> part was huge.  The problem is when hypot(x,y) is close to 1, because then 
> the real part of clog is close to zero.  I was seeing ULPs in the thousands.

Better than GULPs in the thousands :-).

This is not the problem that I first thought it might be.

> I struggled to find a solution, and now I think I have the ULP down to about 
> 2.  I am going to work on it more tomorrow to see if I can get ULP down even 
> further.

I peeked at the Apple code (complex.c).  It is not very sophisticated, but
usages log1p() and doesn't use hypot().  I don't know if this is inherently
more accurate or is just more efficient.

Apple code has a more sophisticated casinh() based on Kahan's old papers
about branch cuts and nothing's sign bit.

I don't know if Apple's copyright inibits us using complex.c.  Its uglyness
prevents me using it.  We didn't use it for cexp() or ccosh(), and our
code is better.

Bruce



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