Use of C99 extra long double math functions after r236148
Steve Kargl
sgk at troutmask.apl.washington.edu
Sun Aug 12 23:07:34 UTC 2012
On Wed, Jul 18, 2012 at 10:07:41AM -0500, Stephen Montgomery-Smith wrote:
>
> >The most obvious immediate difficulty in translating the above into C is
> >that y*y and z*z may overflow when the result shouldn't.
>
> This will be a lot easier than I originally expected. When we are in
> conditions when overflow might occur, we can simply make the approximations
> sqrt(y*y-1) = y
> csqrt(z*z+1) = signum(x)*z
> because in floating point arithmetic, these will not be approximations,
> but true exactly. And I am thinking that the test I will use for when
> to use these approximations will be (y==y+1) and (z==z+1) respectively.
> (I would use (z*z==z*z+1) but that test has the overflow problem.)
I could be mistaken, but I believe that you need to raise the
inexact flag with these approximations because in fact you
are doing floating point math.
--
Steve
More information about the freebsd-numerics
mailing list