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