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>