Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Dec 2007 15:11:43 -0800
From:      Steve Kargl <sgk@troutmask.apl.washington.edu>
To:        freebsd-standards@FreeBSD.ORG
Subject:   Re: [PATCH] hypotl, cabsl, and code removal in cabs
Message-ID:  <20071206231143.GA63969@troutmask.apl.washington.edu>
In-Reply-To: <20071206090833.GA95428@VARK.MIT.EDU>
References:  <20071012180959.GA36345@troutmask.apl.washington.edu> <20071206090833.GA95428@VARK.MIT.EDU>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Dec 06, 2007 at 04:08:33AM -0500, David Schultz wrote:
> I like the approach. One concern, though, is that IEEE 754
> requires sqrt to always be correctly rounded, and one might
> reasonably expect the same from hypot. If we believe that, then
> the intermediate quantity a*a + b*b needs to be computed exactly;
> if it is rounded before we take the square root, the double
> rounding may cause us to round the wrong way. This basically
> requires computing things with twice as many bits of precision.
> Arguably, though, your code is correct in the most important
> ways (avoiding underflow/overflow).
> 
> Also, umm, I've been busy and unable to pay attention for a while,
> so forgive me if I'm missing something, but isn't it the case that
> we don't have a sqrtl(), except for the gcc builtin on some
> architectures?

David,

bde pointed me to the right file in src/libm/ieee that explains
the rounding issues with hypotl.  I haven't had a chance to
update my implementation to use extra care in the evaluation of
a*a+b*b.

As to the sqrtl question, I have an implementation that supposely
does correct rounding in all rounding modes.  It is restricted to
64-bit significand long doubles.  The code does not use bit twiddle;
instead, it uses fenv.

-- 
Steve



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