diff options
Diffstat (limited to 'math/s_catan.c')
-rw-r--r-- | math/s_catan.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/math/s_catan.c b/math/s_catan.c index 87cdd31295..880473ba44 100644 --- a/math/s_catan.c +++ b/math/s_catan.c @@ -1,5 +1,5 @@ /* Return arc tangent of complex double value. - Copyright (C) 1997-2014 Free Software Foundation, Inc. + Copyright (C) 1997-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -29,7 +29,7 @@ __catan (__complex__ double x) int rcls = fpclassify (__real__ x); int icls = fpclassify (__imag__ x); - if (__builtin_expect (rcls <= FP_INFINITE || icls <= FP_INFINITE, 0)) + if (__glibc_unlikely (rcls <= FP_INFINITE || icls <= FP_INFINITE)) { if (rcls == FP_INFINITE) { @@ -55,7 +55,7 @@ __catan (__complex__ double x) __imag__ res = __nan (""); } } - else if (__builtin_expect (rcls == FP_ZERO && icls == FP_ZERO, 0)) + else if (__glibc_unlikely (rcls == FP_ZERO && icls == FP_ZERO)) { res = x; } @@ -89,7 +89,11 @@ __catan (__complex__ double x) } if (absy < DBL_EPSILON / 2.0) - den = (1.0 - absx) * (1.0 + absx); + { + den = (1.0 - absx) * (1.0 + absx); + if (den == -0.0) + den = 0.0; + } else if (absx >= 1.0) den = (1.0 - absx) * (1.0 + absx) - absy * absy; else if (absx >= 0.75 || absy >= 0.5) |