diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-09-15 17:46:08 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-09-15 17:46:08 +0000 |
commit | 0b87419b690d1711697ed95808527400910ff997 (patch) | |
tree | 95c2f39d1c562fc25437dfb20faefbb097e094ef /math/s_ctanf.c | |
parent | 694aabefd2eb3a0e2c5624d7feb1d7310b2bdd8b (diff) | |
download | glibc-0b87419b690d1711697ed95808527400910ff997.tar.gz glibc-0b87419b690d1711697ed95808527400910ff997.tar.xz glibc-0b87419b690d1711697ed95808527400910ff997.zip |
Fix ctan, ctanh missing underflows (bug 18595).
Similar to various other bugs in this area, ctan and ctanh can fail to raise the underflow exception for some cases of results that are tiny and inexact. This patch forces the exception in a similar way to previous fixes. Tested for x86_64 and x86. [BZ #18595] * math/s_ctan.c (__ctan): Force underflow exception for results whose real or imaginary part has small absolute value. * math/s_ctanf.c (__ctanf): Likewise. * math/s_ctanh.c (__ctanh): Likewise. * math/s_ctanhf.c (__ctanhf): Likewise. * math/s_ctanhl.c (__ctanhl): Likewise. * math/s_ctanl.c (__ctanl): Likewise. * math/auto-libm-test-in: Do not allow missing underflow for ctan and ctanh. Add more tests of ctan and ctanh.
Diffstat (limited to 'math/s_ctanf.c')
-rw-r--r-- | math/s_ctanf.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/math/s_ctanf.c b/math/s_ctanf.c index e0a6b8f07c..683ab6e544 100644 --- a/math/s_ctanf.c +++ b/math/s_ctanf.c @@ -110,6 +110,16 @@ __ctanf (__complex__ float x) __real__ res = sinrx * cosrx / den; __imag__ res = sinhix * coshix / den; } + if (fabsf (__real__ res) < FLT_MIN) + { + float force_underflow = __real__ res * __real__ res; + math_force_eval (force_underflow); + } + if (fabsf (__imag__ res) < FLT_MIN) + { + float force_underflow = __imag__ res * __imag__ res; + math_force_eval (force_underflow); + } } return res; |