Fix csqrt missing underflows (bug 18370).
commit948e12a238715b2931cc42486db9e502ff943e54
authorJoseph Myers <joseph@codesourcery.com>
Wed, 19 Aug 2015 22:42:01 +0000 (19 22:42 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 19 Aug 2015 22:42:01 +0000 (19 22:42 +0000)
treec0790fb5b46d6a49e015f15cbec9c45464dd1dc2
parentb75d1cfce647df871700a9027cde35484127d727
Fix csqrt missing underflows (bug 18370).

The csqrt implementations in glibc can miss underflow exceptions when
the real or imaginary part of the result becomes tiny in the course of
scaling down (in particular, multiplication by 0.5) and that scaling
is exact although the relevant part of the mathematical result isn't.
This patch forces the exception in a similar way to previous fixes.

Tested for x86_64 and x86.

[BZ #18370]
* math/s_csqrt.c (__csqrt): Force underflow exception for results
whose real or imaginary part has small absolute value.
* math/s_csqrtf.c (__csqrtf): Likewise.
* math/s_csqrtl.c (__csqrtl): Likewise.
* math/auto-libm-test-in: Add more tests of csqrt.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
ChangeLog
NEWS
math/auto-libm-test-in
math/auto-libm-test-out
math/s_csqrt.c
math/s_csqrtf.c
math/s_csqrtl.c
sysdeps/i386/fpu/libm-test-ulps