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>

index | next in thread | previous in thread | raw e-mail

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


home | help

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